読者です 読者をやめる 読者になる 読者になる

TimeCapsule💊

やったこと,やること,やってみたいこと

zshのプロンプトにGitステータスを表示

毎度git statusと打つのは非常に面倒です。

なのでGit管理下に居る状態なら、プロンプトにGitステータスを表示させましょう。

どんな感じ?

こんな感じです。GitHub - n2kia4/dotfiles: dotfiles

f:id:n2kia4:20170306233453p:plain

  • Git管理下:
    • 変更なしの場合:[git:ブランチ名 ()]
    • 変更あり、addしていない場合:[git:ブランチ名 (-)]
    • 変更あり、add済みの場合:[git:ブランチ名 (+)]
  • Git管理下ではない:
    • 何も表示されない

コード

.zshrcに以下のコードを。

autoload -Uz add-zsh-hook
autoload -Uz vcs_info

setopt prompt_subst

zstyle ':vcs_info:*' enable git svn
zstyle ":vcs_info:*" check-for-changes true
zstyle ':vcs_info:*' stagedstr "+"
zstyle ':vcs_info:*' unstagedstr "-"
zstyle ':vcs_info:*' formats '[%s:%b (%c%u)]'
zstyle ':vcs_info:*' actionformats '[%s:%b|%a (%c%u)]'

function _vcs_info_msg() {
    psvar=()
    LANG=en_US.UTF-8 vcs_info
    [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_"
}
add-zsh-hook precmd _vcs_info_msg

# 私の場合右プロンプトにGitステータス+日時を表示しています。
RPROMPT="%{$fg[yellow]%}%1(v|%1v|)[%D{%m/%d %H:%M}]%{$reset_color%}"

表示位置や色などはお好みでどうぞ。

終わりに

(), (-), (+)で判別し易いし、とりあえずこれで満足。