PowerShell 自带的提示符不够美观,影响工作效率。本文介绍一种自定义 PowerShell 命令提示符中填入 git 分支的方法。 效果展示 正如 Powershell 修改提示符的文字内容和颜色 一文中所说,借助 prompt 函数的灵活编程,我们可以获取 iterm 中的 git 信息,并显示在提示符后方,效果如下图。 开源方案 posh-git 有一套现成的开源方案: posh-git ,可以在命令行上显示分支名和当前目录树的改动情况。但是这个库就像航空母舰,功能虽强大,但是 load 需要稍多时间。如果仅仅需要显示分支名,有些得不偿失。其实完全可以用短短几行代码实现,下面介绍实现的方法: 原理解释 如果在 prompt 函数中获取到分支名,就可以更改提示符的显示。prompt 函数在 正如 这篇文章 中介绍过。 在获取分支名之前,首先应该判断当前目录是否由 git 跟踪。 判断当前目录是否 git 跟踪 可以用 git rev-parse 命令判断当前目录是否 git 跟踪。 如果命令返回值为 0 ,即表示当前目录由 git ;非零的返回值表示当前目录没有被 git 跟踪,并且会向标准输出打印一行错误信息。 为了不显示这行错误信息,按照 Linux 的习惯,我们需要把 git rev-parse 命令的输出重定向到 /dev/null 中去,在 Powershell 中,有一个函数 Out-Null ,可以实现类似功能。所以完整一行的写法为: git rev-parse | Out-Null 判断命令 如果当前目录是 git 跟踪的,就可以使用 git branch 命令获取分支名。这里需要加一个判断。 Powershell 中有一个特殊变量 $? ,和 Bash 类似,如果前面的命令执行成功了,这个变量值就是 true,反之就是 false: # 其他命令 if($?){ } 获取分支名 我们都知道,显示本地分支列表的命令是 git branch ,如果再加上参数 --show-current ,可以只显示当前分支名,而这正是我们需要的。 git branch --show-current --no-color --no-color 参数正如其名,显示不带颜色的文字。 最终结果 完整的代码片段如下: function Prompt { $git_branch = "" git rev-parse | Out-Null if($?){ $git_branch = " $(git branch --show-current --no-color)" } $pattern = $env:userprofile -replace '\\', '\\' $promptString = "$(Get-Location)" -replace $pattern, "~" "`e[1;32m" + $promptString +"`e[1;36m"+ $git_branch + "`e[m " } 这是我自己研究的结果,如果有更好的方法,欢迎跟我联系,提供好的建议。