在Zsh中得到一个表示Git分支的提示

我在.zshrc中提示失败时单独运行以下代码。 这表明我显然没有一个名为__git_ps1的程序。 这不是在MacPorts中。

#1

PROMPT="$(__git_ps1 " \[\033[1;32m\] (%s)\[\033[0m\]")\$"$ 

#2

 PROMPT="$(__git_ps1 " (%s)")\$"$ 

#3

 # 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提示的 博客文章 。

您只需:

  • 一个提供分支名称的函数
  • 启用提示(命令)replace
  • 将函数添加到您的提示

例如

 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)' 

以下是zsh: zsh-git-prompt的扩展git 提示符 。

替代文字

ko-dos的回答非常好,但是我更喜欢比他使用的提示稍微提高一点的提示。 具体来说,我喜欢在提示本身中执行stage,unstaged和untracked文件通知。 用他的答案和zsh vcs_info例子,我想出了以下内容:

 setopt prompt_subst autoload -Uz vcs_info zstyle ':vcs_info:*' stagedstr 'M' zstyle ':vcs_info:*' unstagedstr 'M' zstyle ':vcs_info:*' check-for-changes true zstyle ':vcs_info:*' actionformats '%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f ' zstyle ':vcs_info:*' formats \ '%F{5}[%F{2}%b%F{5}] %F{2}%c%F{3}%u%f' zstyle ':vcs_info:git*+set-message:*' hooks git-untracked zstyle ':vcs_info:*' enable git +vi-git-untracked() { if [[ $(git rev-parse --is-inside-work-tree 2> /dev/null) == 'true' ]] && \ [[ $(git ls-files --other --directory --exclude-standard | sed q | wc -l | tr -d ' ') == 1 ]] ; then hook_com[unstaged]+='%F{1}??%f' fi } precmd () { vcs_info } PROMPT='%F{5}[%F{2}%n%F{5}] %F{3}%3~ ${vcs_info_msg_0_} %f%# ' 

这会创build一个提示,模仿git status -s的颜色输出(可以在.gitconfig文件中configuration)。 一张照片在这里可能是最有帮助的:

提示

git status -s相比:

在这里输入图像说明

如果您不喜欢彩色输出,或者更喜欢其他字符或提示构build,只需更改上述代码中的stagedstrunstagedstrhook_com[unstaged]值即可。

感谢您的链接!

我根据他们提出了以下提示

  # get the name of the branch we are on git_prompt_info() { git branch | awk '/^\*/ { print $2 }' } get_git_dirty() { git diff --quiet || echo '*' } autoload -U colors colors setopt prompt_subst PROMPT='%{$fg[blue]%}%c %{$fg_bold[red]%}$(git_prompt_info)$(get_git_dirty)%{$fg[blue]%} $ %{$reset_color%}' RPROMPT='%{$fg[green]%}%1(j.%j.)' 

请提出任何改进build议。