某天闲得无聊想要通过 powershell 的脚本修改 powershell 的提示符,让 idea 的终端显示更加鲜艳简洁,最终做到如下效果
- 修改提示符颜色
- 修改提示符提示普通用户和管理员权限
- 修改路径表现形式
- 修改项目根路径以 ~ 表示
这是以管理员形式启动的idea,这时候终端是有管理员权限的,所以样式被改变了
实现流程
- 创建一个
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
- 修改 idea 终端的路径
c:\windows\system32\windowspowershell\v1.0\powershell.exe -noexit -command "chcp 65001; . 'ztp_function_idea'"
到此这篇关于idea 通过脚本配置终端提示符样式的方法的文章就介绍到这了,更多相关idea终端提示符内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论