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

反省はしても後悔はしない

Vim とか備忘録とか。それと関数型言語勉強中

vim で gitk 的なことを行う gitv が便利

前回に引き続き、今回も Vim + Git ネタですが・・・。

vimshell や fugitive.vim を使っているとほとんどの操作を Vim 上で実現できるます。でも、gitk だけは別ウィンドウで起動しなければならず面倒だと思っていました。
Vim 上で gitk 的なことを行うプラグインがないかと思っていたら gitv.vim というものがありました。

インストール

というか github
gregsexton/gitv

使い方

コマンドモードで

:Gitv

と打てばブラウザモード(後述)で起動します。
gitk --all 相当のことは

:Gitv --all

でいけます。
また、

:Gitv!

のように ! をつけるとファイルモード(後述)で起動します。

ブラウザモード

左のウィンドウにコミットのグラフ、右のウィンドウにコミットメッセージとそのコミットでの変更点が表示されます。
j や k でグラフ上を移動でき、<CR> でそのコミットの情報が見れます。

ファイルモード

ファイルモードは1つのファイルの履歴を追うモードです。
:Gitv! コマンドを叩いた時に開いていたファイルの履歴をたどります。
上にコミットのログ、下にコミット時のファイルの状態が表示されます。

キーバインド

キー ブラウザモード ファイルモード
<CR> 選択したコミットの情報を開く 選択したコミット時におけるファイルを表示
o 水平にウィンドウを分割してコミットの情報を開く 水平にウィンドウを分割してファイルを表示
O 新しいタブでコミットの情報を開く 新しいタブでファイルを表示
s 垂直にウィンドウを分割して(ry 垂直にウィンドウを分割して(ry
i <CR>と同じ コミット情報の表示
q gitv の終了 gitv の終了
u 最新の情報に更新 最新の情報に更新
co ブランチやコミットをチェックアウト(HEAD が移動) ファイルをチェックアウト(HEADは移動しない)
D なにもなし 表示されているファイルと選択されたファイルの差分を vim の diff で見る
S diff --stat の表示 diff --stat の表示
ビジュアルモードで複数のコミットをハイライトした状態で D なにもなし ハイライトされている一番上のコミットと一番下のコミットの差分を vim の diff で見る
ビジュアルモードで複数のコミットをハイライトした状態で S 一番上のコミットと一番下のコミットの diff --stat 一番上のコミットと一番下のコミットの diff --stat
ビジュアルモードで複数のコミットをハイライトした状態で m 一番上のブランチと一番下のブランチをマージする(上と下が必ずブランチやタグでなければならない) (たぶん)なにもなし

不具合・・・?

ひとによるのかもしれませんが、私の環境ではブラウザモードで開いた時に diff が折りたたまれて表示されてしまいました。
以下のようにやれば直るようです。

autocmd FileType git :setlocal foldlevel=99
参考
:help gitv