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

 更新时间:2025年08月19日 11:16:02   作者:zimoyin  
这篇文章给大家介绍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终端提示符内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java常用字符串方法小结

    Java常用字符串方法小结

    字符串变量是Java与C语言的一大不同之处。Java之中的 String 类和 Stringbuffer 类提供了大量的对字符串操作的方法。String 类适合处理较小的字符串,而Stringbuffer类适合处理大量字符串
    2017-04-04
  • java实现输出任意整数的每一位

    java实现输出任意整数的每一位

    这篇文章主要介绍了java实现输出任意整数的每一位,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    详解Mybatis-plus(MP)中CRUD操作保姆级笔记

    本文主要介绍了Mybatis-plus(MP)中CRUD操作保姆级笔记,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java有哪些操作字符串的类?区别在哪?

    Java有哪些操作字符串的类?区别在哪?

    今天给大家爱带来的是关于Java的相关知识,文章围绕着Java操作字符串的类展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • java实现超大文件的读写功能

    java实现超大文件的读写功能

    这篇文章主要为大家详细介绍了java实现超大文件的读写功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • mybatis处理枚举类的简单方法

    mybatis处理枚举类的简单方法

    这篇文章主要给大家介绍了关于mybatis处理枚举类的简单方法,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • java中新生代和老生代的关系说明

    java中新生代和老生代的关系说明

    这篇文章主要介绍了java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-07-07
  • java实现单人版五子棋游戏

    java实现单人版五子棋游戏

    这篇文章主要为大家详细介绍了java实现五子棋小游戏的相关资料,十分简单实用,有不错的参考借鉴价值,推荐给大家,需要的朋友可以参考下
    2016-02-02
  • IDEA 2021.3 使用及idea2021.3.1激活使用方法

    IDEA 2021.3 使用及idea2021.3.1激活使用方法

    IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,今天通过本文给大家介绍idea2021.3.1激活及使用教程,感兴趣的朋友一起看看吧
    2022-01-01
  • Java实现限制文件上传类型功能

    Java实现限制文件上传类型功能

    这篇文章主要为大家详细介绍了在Java中如何实现限制文件上传类型功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07

最新评论