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

VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい

fugitiveはvim用のgitラッパープラグインだ。
fugitiveを使うとgitを操作するためにいちいちvimから抜ける必要が劇的に減る。
例えばaddやcommitだけでなく、ソースの変更箇所をパッチ形式でなくvimdiffで簡単に表示できるのは非常に便利だ。
みんなが大好きなgit-blameもコマンド1つでvim上で綺麗に表示してくれる。
Vim+Gitな方は是非fugitive.vimを使ってみて欲しい。

github: https://github.com/tpope/vim-fugitive

コマンド早見表

これらのコマンドは全てgitリポジトリ内でのみ操作可能だ。

:Gstatus
新しい窓を作ってgit statusを表示
:Gwrite
現在開いているソースをgit add
:Gread
現在開いているソースの直前のコミット時のソースを表示
:Gmove destination/path
現在開いているソースをgit mvする
:Gremove
現在開いているソースをgit rmする
:Gcommit
git commit
:Gblame
現在のソースをgit blame。vimが色づけしてくれる
:Gdiff
現在のソースの変更点をvimdiffで表示

この他にもいくつかコマンドがあるので、:help fugitiveを実行していただきたい。

Gstatus

f:id:yuku_t:20110427020056p:image:w360
:Gstatusを使った様子。上に小さくgit-statusが表示されている。

:Gstatusを使うと、vimを使いながら手軽にgit-statusを確認することが可能となる。
git-statusの窓はあくまでもvimであるから、そこに表示されているファイル名にカーソルを合わせ「gf」とタイプするだけで、即座に変更されているファイルを開くこともできる。:Gwriteや:Gdiffと組み合わせるとさらに大きな威力を発揮するだろう。
追記:

  • :Gstatus上の変更のあったファイルにカーソルを合わせた状態で
    • Dで:Gdiff起動(差分表示)
    • -でaddとresetの切り替え
    • pでパッチを表示
    • Enterでファイル表示
  • :Gstatusの画面上で
    • Cでcommit
  • :help :Gstatus

Gwrite

f:id:yuku_t:20110427021658p:image:w360
:Gstatusに続けて、変更があったファイルを開いた状態で:Gwriteを使った。git-statusの窓が変化していることがわかる。

:Gwriteを使うとvimから簡単にgit-addを呼ぶことができる。:Gwriteは引数にgit-addしたいファイルへのパスを設定できる。省略したら現在開いているファイルが対象となる。
Fugitive.vimで指定するパスは全て相対パスだった場合は現在のディレクトリから、そして、絶対パスの場合はファイルシステムのホームディレクトリではなく、リポジトリのホームディレクトリから設定される。
:Gwqを使うと:Gwriteしたあとに:wqが呼ばれる。

Gread

現在開いているソースの直前のコミット時のソースを表示してくれる。表示されたファイルは上書きされているのではなく、バッファに展開されているだけなので、心配無用。
revisionも指定できるので1つ前のコミット時の様子をみたければ:Gread HEAD^でいける。
現在との差分を表示したい場合は:Gdiffを使おう。

Gremove

:Gremoveは引数でパスが与えられたファイルをgit-rmする。
パスが省略された場合は現在開いているファイルがgit-rmされる。

Gmove

git-mvを呼び出すためのものだ。
:Gmove destination/pathと指定することによって、開いているファイルをgit-mvする。
パスは現在のディレクトリからの相対パスか、リポジトリホームからの絶対パスで指定できる。/で始まると絶対パスになる。
移動した後は自動的に移動した後のファイルを開いてくようになっている。

Gcommit

git-commitを呼び出す。コミット画面が表示された新しい窓が作成されるはずだ。
git-commitに-vオプションを付けたい場合はそのまま:Gcommit -vとすればいい。

Gdiff

f:id:yuku_t:20110427021659p:image:w360
:Gdiffを使うとHEADとの変更をvimdiffで簡単に確認することができる

:Gdiffは現在開いているファイルに加えられた変更をvimdiffでみせてくれる。
しかも、引数にrevisionを指定できる。たとえばmasterブランチとの差分をみたいなら:Gdiff masterだ。

Gblame

みんな大好きgit-blameだが、デフォルトでは非常に見にくいのが難点だ。

f:id:yuku_t:20110427021700p:image:w360
あの見にくかったgit-blameだが...

そんなときは:Gblameをためらいなく使おう。:Gblameを使えば
f:id:yuku_t:20110427021701p:image:w360
こんなにもきれいに分かりやすく表示される。片方をスクロールするともう一方もあわせてスクロールされる親切設計だ。
ソースコードvimによって色づけされているので非常に読みやすい。
このときEnterを押すと、カーソルが乗っている行の時のソースが表示されるという天晴れな機能も搭載している。

f:id:yuku_t:20110427104814p:image:w360
Enterを押したあとの様子。Enterした行が書かれたときのファイルの状態が右側に表示されている。