Powershell 在提示符中显示 git 分支信息

2021-08-24
标签: DIY POWERSHELL

PowerShell 自带的提示符不够美观,影响工作效率。本文介绍一种自定义 PowerShell 命令提示符中填入 git 分支的方法。

效果展示

正如 Powershell 修改提示符的文字内容和颜色 一文中所说,借助 prompt 函数的灵活编程,我们可以获取 iterm 中的 git 信息,并显示在提示符后方。

效果正如 iterm 一样,如下图

开源方案 posh-git

有一套现成的开源方案: posh-git ,可以在命令行上显示分支名和当前目录树的改动情况。但是这个库就像航空母舰,功能虽强大,但是 load 需要稍多时间。如果只需要显示分支名,可以稍微用几行代码即可实现。

流程解释

正如 Powershell 修改提示符的文字内容和颜色 一文中所说,通过修改 prompt 函数即可实现。

如果在 prompt 函数 中用 git 命令获取分支名,就可以显示在命令行上。代码如下:

判断当前目录是否 git 控制

判断当前目录是否 git 控制的方法可以用 git rev-parse 命令,如果返回值为 0,即表示当前目录由 git 控制;非零的返回值表示当前目录没有被 git 控制,并且会向标准输出打印一行错误信息。

为了不显示这行错误信息,我们需要把 git rev-parse 命令的输出重定向到 null 中去,在 Powershell 中,有一个函数 Out-Null ,可以实现这个功能。所以完整一行的写法为:

git rev-parse | Out-Null

判断命令

如果当前目录是 git 控制的,就可以使用 git branch 命令获取分支名。这里需要加一个判断。

Powershell 中有一个特殊变量 $? ,如果他前面的命令执行成功了,这个变量值就是true,反之就是false,所以可以在上面语句的后方判断这个变量的值。

if($?){
}

获取分支名

获取分支名的命令是 git branch ,不带参数时,显示本地分支列表,再加上 --show-current ,可以只显示当前分支名,这正是我们需要的。

git branch ---show-current ---no-color

--no-color 参数正如其名,显示不带颜色的字样。

最终结果

结合上面的 流程解释Powershell 修改提示符的文字内容和颜色 这篇文章的结果,可以得到完整的代码片段如下:

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 "
}

这是我自己研究的结果,如果有更好的方法,欢迎跟我联系(邮箱在页面右上角),提供好的建议。

如果您对本站内容有疑问或者寻求合作,欢迎 联系邮箱邮箱已到剪贴板

标签: DIY POWERSHELL

欢迎转载本文,惟请保留 原文出处 ,且不得用于商业用途。
本站 是个人网站,若无特别说明,所刊文章均为原创,并采用 署名协议 CC-BY-NC 授权。