VimのステータスラインにGitのブランチ名を表示

今までGitなんてあんまり使ってこなくて使い方も正直よく分かってなかったんですが、最近複数人で開発(といっていいんだろうか)をすることになって、Gitを使っています。で、だんだんGitが分かってきたんですが、そんな中で便利だと思ったのがこれ。


Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマートに表示する方法 - mollifier delta blog


…なんですが、実際作業するのはvimなのでvimのステータスラインにブランチ名を表示させるようにしてみました。

http://gyazo.com/e0f535156b736c7b5e7e29cf4690260b.png

Gitで管理しているディレクトリにあるファイルを編集するとき右側に[Git:ブランチ名]みたいな感じで表示されます。


実際の設定はこんな感じ。

set laststatus=2 " ステータスラインを常に表示

let &statusline = ''
let &statusline .= '%<%f %h%m%r%w'
let &statusline .= '%='
let &statusline .= '[%{pathshorten(getcwd())}]'
let &statusline .= '%{exists("b:git_branch") &&  b:git_branch != "" ? "[Git:" . b:git_branch . "]" : ""}'  " Gitのブランチ名を表示
let &statusline .= '%y'	
let &statusline .= '[%{&l:fileencoding == "" ? &encoding : &l:fileencoding}]' 
let &statusline .= '['.&ff.']'
let &statusline .= ' %-14.(%l,%c%V%) %P'

autocmd! BufEnter * let b:git_branch = GetGitBranchName()

function! GetGitBranchName()
	let dir = expand('%:p:h')
	let branch = ""
	let r = system('cd ' . dir . ' && git symbolic-ref HEAD 2> /dev/null')
	if r != ""
		let branch = split(r,"/")[-1][:-2]
	endif
	return branch
endfunction

まぁなんかいろいろ書いてありますが今回関係あるのは"Gitのブランチ名を表示"と書いてあるところです。新しくバッファを開くときにブランチ名を取得して(あれば)表示してます。
この設定がベストなのかよく分かりませんがとりあえず今のところはいい感じです。