zsh提示没有正确评估颜色

时间:2017-12-06 18:15:42

标签: shell zsh

我的.zshrc:

parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

cNone='\033[00m'
cRed='\033[01;31m'
cGreen='\033[01;32m'
cYellow='\033[01;33m'
cPurple='\033[01;35m'
cCyan='\033[01;36m'
cWhite='\033[01;37m'
cBold='\033[1m'
cUnderline='\033[4m'

COLOR="\033[32m\]"
export PS1="(parse_git_branch) %~ ${cRed}♥ "

输出:

(parse_git_branch) ~/someDirectory/Another \033[01;32m♥

不确定为什么它没有正确地转义颜色,也不确定为什么它没有评估git branch命令。

1 个答案:

答案 0 :(得分:1)

首先,根据http://zsh.sourceforge.net/Doc/Release/Prompt-Expansion.html,zsh支持使用%F 启动字体颜色,%f 支持停止字体颜色:

  

如果终端支持,则使用不同的前景色启动(停止)。颜色可以指定两种方式:作为数字参数,正常情况,或者通过%F后面的大括号中的序列,例如%F {red}。

制作红色♥:%F{red}♥%f

其次,要获取g​​it分支名称,有一种更简单的方法:

git rev-parse --abbrev-ref HEAD 2> /dev/null

第三,为了在提示setopt prompt_subst内运行命令是必需的

最后,这是你多彩的提示: setopt prompt_subst PS1='$(git rev-parse --abbrev-ref HEAD 2> /dev/null) %~ %F{red}♥%f '

如果你想使用" (双引号)而不是' (单引号),在$之前需要一个\(反斜杠): setopt prompt_subst PS1="\$(git rev-parse --abbrev-ref HEAD 2> /dev/null) %~ %F{red}♥%f "

可在此处找到更多信息https://stackoverflow.com/a/36196179/8272771