vcs_infoを使用して、gitに関する情報をプロンプトに追加しています。私は設定しました:
setopt promptsubst
autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr '!'
zstyle ':vcs_info:*' unstagedstr '?'
zstyle ':vcs_info:*' formats '[%b]%c%u'
...
PROMPT='${vcs_info_msg_0_}$ '
これで、現在の変更、つまりステージングされたファイルとステージングされていないファイルを含むgitリポジトリができました。
# On branch test
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: a
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# b
ただし、プロンプトはステージングされていないファイルを無視し、表示されているだけです。ステージングされたもののために。次のようになります。
[test]!$
%uが何を出力するかを誤解したか、どこかにタイプミスがあるはずです。私はzsh4.3.17を使用しています。