zshでgitのbranch名をPROMPTに表示させるようになるまで

PROMPTにbranch名を表示させたいなーと思って調べていて辿り着いたのが、
Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法 - mollifier delta blog
で、vcs_infoというのが便利そうだ、と思い、使ってみようとしたら、どうも使えないっぽい。
vcs_info: function definition file not found - 写経日記
4.3.6くらいから入った機能らしい。なるほど、自分のMacBookに標準で入っていた/bin/zshは4.3.4だ。

% /bin/zsh --version
zsh 4.3.4 (i386-apple-darwin9.0)

zshのinstall

ということは新しいzshを入れないといけないっぽい。どうやらMac Portsからで大丈夫そう。

% port variants zsh-devel                                                                  
zsh-devel has the variants:
	darwin_8: Platform variant, do not select manually
	mp_completion: Install port(1) completion file
	pcre: Add regular expressions support in builtin functions through PCRE
	doc: Install extra documentation
	examples: Install configuration examples
	universal: Build for multiple architectures
% sudo port install zsh-devel +mp_completion +doc +example
...
% /opt/local/bin/zsh --version
zsh 4.3.10 (i386-apple-darwin9.8.0)

とやってみた。今回調べていて"port variants"で追加機能を調べられるというのを初めて知った。。

諸設定

で、こいつを標準のshellに設定しようとchshで変更しようとしてもエラーになる、と…。
zshをMacPortsでアップデートする - はてブロ@ama-ch
このへんを参考に、/etc/shellsを編集

% cat /etc/shells
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh
/opt/local/bin/zsh

とリストに入れてやってからchshでShellに"/opt/local/bin/zsh"を設定。


あと自分は~/.zshrcのPATH設定が微妙に狂っていたので少し修正

...

export PATH=/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH
export MANPATH=/opt/local/share/man:$MANPATH

...

と。
これで今までと同じように普通に新しいzshが使えるっぽい。

改めて.zshrcを変更

再びGit だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法 - mollifier delta blogを参考にしつつ、.zshrcを書き換える。
今回PROMPTに関して変更したのは以下の部分。

autoload -U colors
colors


autoload -Uz vcs_info
zstyle ':vcs_info:*' enable git svn
zstyle ':vcs_info:*' formats '%{'${fg[red]}'%}[%s %b] %{'$reset_color'%}'


setopt prompt_subst
precmd () {
  LANG=en_US.UTF-8 vcs_info
  LOADAVG=$(sysctl -n vm.loadavg | perl -anpe '$_=$F[1]')
  PROMPT='${vcs_info_msg_0_}%{${fg[yellow]}%}%* ($LOADAVG) %%%{$reset_color%} '
}
RPROMPT='%{${fg[green]}%}%/%{$reset_color%}'

gitのbranchが存在する場合は赤でPROMPTの左端に表示するようにしてみた。
実行イメージは以下のようなカンジ。


まぁレイアウトはあとで使いながら調整するとして、とりあえず表示させることができるようになった!わーい