zshのプロンプトにgitのステータスをシンプル可愛く表示
ついにシェルをzshにしました。
シェルならzshで決まり!みたいなことを聞きつつもbashで満足してたのでそのままだったのですが、
補完あたりに物足りなさを感じてきたので移行。
まずはプロンプトですよね。
ってことでカスタムしてみました。
こんな感じ
- カレントディレクトリ
- gitのリポジトリ名と現在のブランチ
- 変更あり、追加済み(staged)= 黄色
- 変更あり、未追加(unstaged)= 赤
- 変更なし、未追跡ファイルあり(untracked)= 水色
- 変更なし、未追跡ファイルなし(clean)= 緑
こんな感じにしてみました。
いろんな記事参考にしながらも、ぴったりくる設定がなかったので大半書き換わった感じです。
.zshrcの該当コード
# プロンプト autoload -Uz vcs_info zstyle ':vcs_info:*' enable git svn zstyle ':vcs_info:*' max-exports 6 # formatに入る変数の最大数 zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' formats '%b@%r' '%c' '%u' zstyle ':vcs_info:git:*' actionformats '%b@%r|%a' '%c' '%u' setopt prompt_subst function vcs_echo { local st branch color STY= LANG=en_US.UTF-8 vcs_info st=`git status 2> /dev/null` if [[ -z "$st" ]]; then return; fi branch="$vcs_info_msg_0_" if [[ -n "$vcs_info_msg_1_" ]]; then color=${fg[green]} #staged elif [[ -n "$vcs_info_msg_2_" ]]; then color=${fg[red]} #unstaged elif [[ -n `echo "$st" | grep "^Untracked"` ]]; then color=${fg[blue]} # untracked else color=${fg[cyan]} fi echo "%{$color%}(%{$branch%})%{$reset_color%}" | sed -e s/@/"%F{yellow}@%f%{$color%}"/ } PROMPT=' %F{yellow}[%~]%f `vcs_echo` %(?.$.%F{red}$%f) '
設定ファイルなるべく短くしたいのでコンパクトになるようにしました。
ついでに
コマンド打ってエラーが返ったときは$が赤くなります。
感想
zshかわいい