Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法
2012/12/13 追記
zsh 4.3.11 以降の新しい機能を使って改良しました。 -> 「zsh の vcs_info に独自の処理を追加して stash 数とか push していない件数とか何でも表示する - Qiita」
最近Gitを使い始めた。で、ブランチとか使うようになって、今どのブランチにいるのかをzshのプロンプトに表示したくなってきた。「そういやそんなブログのエントリ、よく見かけるな」と思ってちょっと調べてみた。
gitコマンドを呼び出してなんかやってる例が多いけど、manを読んでたらzsh自体にそういうのが組み込まれてたので紹介。vcs_info ってのを使うと解決する。
zshrcの例
いきなりだけど zshrc の書き方の例。
autoload -Uz vcs_info zstyle ':vcs_info:*' formats '(%s)-[%b]' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' precmd () { psvar=() LANG=en_US.UTF-8 vcs_info [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_" } RPROMPT="%1(v|%F{green}%1v%f|)"
実際の様子はこんな感じ。
右プロンプトにGitのブランチ名とかが出てる。
2009/08/20 追記
vcs_info で Subversion のリビジョン番号が出ない問題を参考に、 vcs_info
コマンド行の LANG
の指定を追加した。これで Subversion のときにリビジョン番号がちゃんと表示されるようになる。
vcs_info とは
vcs_info は、Subversion(svn), Git, Mercurial(hg) といったバージョン管理システムの情報を自動的に取得するzshの関数。version control system(vcs) の情報、という意味。今のブランチ名をプロンプトに表示したりできるようになる。
いろんなシステムに対応してたり、何かと高機能で便利だと思う。詳しくは man zshcontrib の GATHERING INFORMATION FROM VERSION CONTROL SYSTEMS を参照。
設定内容の解説
zstyle ':vcs_info:*' formats '(%s)-[%b]'
行について
ここで基本的な表示フォーマットを指定している。「%なんとか」 の意味は以下の通り。
- %s
- どのバージョン管理システムを使用しているか。git とか svn とかに置き換えられる。
- %b
- ブランチ情報。
あとは、こんなのもあるもよう。
zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]'
行について
基本的に表示フォーマットは formats
で指定するんだけど、actionformats
ってのもある。マージでコンフリクトしたとか、何か特別なことが起こった場合にこの actionformats
に基づいて表示される。
マージでコンフリクトを起こした場合の例。
actionformats
の %a が merge ってアクション名に置き換わってる。これはコンフリクトを解消するまで残るので、うっかり忘れたりしなくて便利。
RPROMPT="%1(v|%F{green}%1v%f|)"
について
RPROMPT
の右側で %1(v| ... |)
とやってるとこは、バージョン管理システムのディレクトリにいたらそれを表示、そうでないなら空文字列、ってやってる。詳しくは man zshmisc の %(x.true-text.false-text)
またはzshの本の100ページを参照。
最後に
こんな感じで、フォーマットとか色とか変えて試してみるといいよ。
今回参考にしたページは以下。