1. ホーム
  2. git

[解決済み] ZshでGit-branchを示すプロンプトを表示させる方法

2023-04-16 19:58:34

質問

.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-branch の名前を表示するプロンプトを表示するにはどうしたらよいですか。

どのように解決するのですか?

__git_ps1 は git-completion.bash のものです。zshでは、おそらく現在のディレクトリのgitブランチを決定するための独自の関数を提供する必要があります。かなりの数の ブログ記事 についての git プロンプト をzshに追加しました。

だけでいいんです。

  • ブランチ名を指定する関数
  • プロンプト(コマンド)置換を有効にする
  • プロンプトに関数を追加する

例えば

git_prompt() {
 ref=$(git symbolic-ref HEAD | cut -d'/' -f3)
 echo $ref
}
setopt prompt_subst
PS1=$(git_prompt)%#
autoload -U promptinit
promptinit

更新: git_prompt() の代わりに zsh vcs_info モジュールを使用するようにしました。

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