当前位置: 代码网 > it编程>编程语言>Java > IDEA 通过脚本配置终端提示符样式的方法

IDEA 通过脚本配置终端提示符样式的方法

2025年08月19日 Java 我要评论
某天闲得无聊想要通过 powershell 的脚本修改 powershell 的提示符,让 idea 的终端显示更加鲜艳简洁,最终做到如下效果修改提示符颜色修改提示符提示普通用户和管理员权限修改路径表

某天闲得无聊想要通过 powershell 的脚本修改 powershell 的提示符,让 idea 的终端显示更加鲜艳简洁,最终做到如下效果

  • 修改提示符颜色
  • 修改提示符提示普通用户和管理员权限
  • 修改路径表现形式
  • 修改项目根路径以 ~ 表示

这是以管理员形式启动的idea,这时候终端是有管理员权限的,所以样式被改变了

实现流程

  1. 创建一个 ztp_function_idea.ps1 文件(该文件需要在配置在环境变量,如果没有则需要使用的时候键入完整路径)
function prompt {
    $dir = (get-location).path;
    if ($null -eq $env:work) {
        $env:work = $dir
    }
    $name = $env:username.tolower()
    # 定义路径映射:每个元素是路径表达式和对应简称的元组
    $pathaliases = @(
        @{ path = $env:userprofile; alias = 'home' }
        @{ path = $env:work; alias = '~' }
        @{ path = [environment]::getfolderpath('desktop'); alias = 'desktop' }
        @{ path = [environment]::getfolderpath('mydocuments'); alias = 'documents' }
        @{ 
            # personal 文件夹且不等于 mydocuments(避免重复)
            path = { [environment]::getfolderpath('personal') }; 
            condition = { $dir -eq $_.invoke() -and $dir -ne [environment]::getfolderpath('mydocuments') }
            alias = 'documents' 
        }
        @{ path = [environment]::getfolderpath('startup'); alias = 'startup' }
        @{ path = [environment]::getfolderpath('startmenu'); alias = 'startmenu' }
        @{ path = [environment]::getfolderpath('commonstartup'); alias = 'startup' }
        @{ path = [environment]::getfolderpath('commonstartmenu'); alias = 'startmenu' }
        @{ path = [environment]::getfolderpath('favorites'); alias = 'favorites' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::applicationdata); alias = 'roaming' }
        @{ path = [environment]::getfolderpath('localapplicationdata'); alias = 'localappdata' }
        @{ path = ${env:programfiles(x86)}; alias = 'programfiles(x86)' }
        @{ path = [environment]::getfolderpath('templates'); alias = 'templates' }
        @{ path = [environment]::getfolderpath('recent'); alias = 'recent' }
        @{ path = [environment]::getfolderpath('sendto'); alias = 'sendto' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::networkshortcuts); alias = 'nethood' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::printershortcuts); alias = 'printhood' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::mymusic); alias = 'music' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::mypictures); alias = 'pictures' }
        @{ path = [environment]::getfolderpath([environment+specialfolder]::myvideos); alias = 'videos' }
        @{ 
            path = { (new-object -comobject shell.application).namespace('shell:downloads').self.path }
            alias = 'downloads'
        }
        @{ path = "$env:userprofile\onedrive"; alias = 'onedrive' }
        @{ path = "$env:programfiles\windowsapps"; alias = 'windowsapps' }
        @{ path = [environment]::getfolderpath('system'); alias = 'system' }
        @{ path = [environment]::getfolderpath('commonapplicationdata'); alias = 'programdata' }
        @{ path = [environment]::getfolderpath('programfiles'); alias = 'programfiles' }
        @{ path = $env:windir; alias = 'windows' }
    )
    $flag = 0
    # 遍历数组查找匹配项
    foreach ($item in $pathaliases) {
        $targetpath = if ($item.path -is [scriptblock]) { $item.path.invoke() } else { $item.path }
        if ($dir.startswith($targetpath, [system.stringcomparison]::ordinalignorecase)) {
            if ($item.condition) {
                if($item.condition.invoke()){}
            }
            $relative = $( $suffix = $dir.substring($targetpath.length).trimstart('\'); "/$suffix".trimend('/') )
            $dir = $item.alias + $relative
            $result = if ($item.alias -eq '~') { '' } else { '/' }
            $dir = $result + $dir.replace('\', '/').replace(':', '/') -replace '/+', '/'
            $flag = 1
            break
        }
    }
    $dir = $dir.tolower()
    if ($flag -eq 0) {
        # $dir = '/' + $dir.tolower().replace('\', '/').replace(':', '/') -replace '/+', '/'
        $dir = '/' + $dir.replace('\', '/').replace(':', '/') -replace '/+', '/'
        $dir = $dir -replace '/$',''
    }
    # ✅ ansi 控制字符
    $esc = [char]27
    $green_bold = "$esc[1;32m"   # 加粗 + 绿色
    $blue       = "$esc[34m"     # 蓝色
    $reset      = "$esc[0m"      # 重置(关闭所有样式)
    $isadmin = ([security.principal.windowsprincipal] [security.principal.windowsidentity]::getcurrent()).isinrole([security.principal.windowsbuiltinrole]::administrator)
    $userpart     = "root@$name"
    $pathpart     = $dir
    $promptchar   = "# "
    if (!$isadmin) {
        $userpart     = "$name@$name"
        $promptchar   = "$ "
    }
    # 组合输出:绿色加粗用户名 + 重置后加冒号 + 蓝色路径 + 重置 + 提示符
    "$green_bold$userpart$reset`:$blue$pathpart$reset$promptchar"
    # "root@$name`:$dir# " 
}
# todo 启动一个终端并应用上面的函数 %systemroot%\system32\windowspowershell\v1.0\powershell.exe -noexit chcp 65001
  1. 修改 idea 终端的路径
c:\windows\system32\windowspowershell\v1.0\powershell.exe  -noexit -command "chcp 65001; . 'ztp_function_idea'"

到此这篇关于idea 通过脚本配置终端提示符样式的方法的文章就介绍到这了,更多相关idea终端提示符内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com