在命令提示符中追加git的分支名称

21

我想使用 Git-completion.bash 的一项功能,但是我无法自定义我想要的外观。这是我的 .bash_profile 相关部分:

source ~/.git-completion.bash

function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY}
$ "
}
prompt

而且它没有显示分支名称。

然而,如果我使用下面的命令替换上面的export PS1命令,它按预期工作:

export PS1='\w$(__git_ps1 "(%s)") > '

我猜这是一些撇号/引号的问题。

我应该如何纠正第一个版本以使其正常工作?

2个回答

33

引号使用的技巧是将所有内容都用双引号括起来,除了$(__git_ps1 "(%s)")这个部分要用单引号括起来。

source ~/.git-completion.bash
function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}"
}
prompt

一种替代方案是在问题代码中将$(替换为\$(

背景信息:在export PS1="..."时间,发生了两次替换,稍后在显示提示符时再次替换。您希望每次显示提示符时都执行__git_ps1,因此必须确保第一次替换保持$(...)不变。所以您可以编写'$(...)'"\$(...)"。这就是我提出的两个解决方案的基本思路。


1
使用本地颜色是使事物易读的好技巧。我一定会借鉴这个想法。顺便告诉其他人,我喜欢用黄色表示我的路径 - local YELLOW="\[\033[0;33m\]" - studgeek

5

不确定,但vcprompt可能更好地解决了这个问题?


1
可能不是涵盖了 git-completion.bash 中所有 __git_ps1 选项,但我真的很喜欢它还提供了其他版本控制系统的信息。感谢您的建议! - Mark van Lent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接