我在.zshrc中未按提示分别运行以下代码。这表明我显然没有一个名为__git_ps1的程序。它不在MacPorts中。
PROMPT="$(__git_ps1 " \[\033[1;32m\] (%s)\[\033[0m\]")\$"$
PROMPT="$(__git_ps1 " (%s)")\$"$
# Get the name of the branch we are on
git_prompt_info() {
branch_prompt=$(__git_ps1)
if [ -n "$branch_prompt" ]; then
status_icon=$(git_status)
echo $branch_prompt $status_icon
fi
}
# Show character if changes are pending
git_status() {
if current_git_status=$(git status | grep 'added to commit' 2> /dev/null); then
echo "☠"
fi
}
autoload -U colors
colors
setopt prompt_subst
PROMPT='
%~%{$fg_bold[black]%}$(git_prompt_info)
→ %{$reset_color%}'
如何获得显示Git分支名称的提示?
__git_ps1
来自git-completion.bash。在zsh中,你可能必须提供自己的函数来确定当前目录的git分支。关于zsh的git提示,有很多博客文章。
你只需:
例如
git_prompt() {
ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
echo $ref
}
setopt prompt_subst
PS1=$(git_prompt)%#
autoload -U promptinit
promptinit
更新:使用zsh vcs_info模块代替git_prompt()
setopt prompt_subst
autoload -Uz vcs_info
zstyle ':vcs_info:*' actionformats \
'%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
zstyle ':vcs_info:*' formats \
'%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{5}]%f '
zstyle ':vcs_info:(sv[nk]|bzr):*' branchformat '%b%F{1}:%F{3}%r'
zstyle ':vcs_info:*' enable git cvs svn
# or use pre_cmd, see man zshcontrib
vcs_info_wrapper() {
vcs_info
if [ -n "$vcs_info_msg_0_" ]; then
echo "%{$fg[grey]%}${vcs_info_msg_0_}%{$reset_color%}$del"
fi
}
RPROMPT=$'$(vcs_info_wrapper)'
git_prompt是错误的,如果您的分支带有/则不起作用。使用
cut -d'/' -f3-
代替。谢谢!,这有效。您能否解释一下这些神秘的zstyle命令的作用?
@balki为前景
%F{n}
启用ANSI颜色n
,并%f
禁用前景颜色。例如,如果您忽略颜色,则formats
格式%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}]%f
变为(%s)-[%b]
。在%s
得到由VC系统(例如GIT)代替,%b
得到由当前分支取代。@balki将
(sv[nk]|bzr)
在子模式branchformat
限制了它svn
,svk
和bzr
。这意味着这些系统应使用branch:revision
而不是默认值branch
。由于不支持该enable
行,bzr
因此此bzr
限制为“死代码”。前三行是从ZSH docs逐字复制的,但最后一行是其他人添加的,这可能解释了无效代码。@balki
actionformats
变成(%s)-[%b|%a]
无视颜色。在特殊操作期间使用此格式,并%a
描述操作。恕我直言,这是最有用的功能:例如,对于git,它告诉您何时处于重新设置的中间(在尝试解决合并冲突时,我常常忘记了这一点)。