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

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

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

fugitive.vim が便利すぎたのでメモ

Vim から Git を操作するプラグインとしては、今まで git.vim を使っていたんですが、fugitive.vim のほうが便利だったので乗り換えました。

詳しい説明はここ
VimmerなGit使いはfugitive.vimを今すぐ入れたほうがいい - SELECT * FROM life;

ここでは、自分が特に便利だと思った機能を書きます。

git add -p をグラフィカルに行う

git add -p を使うと、複数の変更箇所のうちどの変更をコミットに含めるかを選ぶことができますが、fugitive の :Gdiff を使うとこれをグラフィカルに行うことができます。
:Gdiff コマンドはインデックスとワークツリーの状態の差分を vim の diff で表示します。
こんな感じ

たとえば、スタイルシートの設定(上のほうの差分)はコミットに含めたいけど、クラス属性の付与(下のほう)は含めたくないとしましょう。
まず、カーソルを上の青い所に移動させます。(]c や [c で変更箇所にジャンプできます)
そこで dp と押すと、カーソル位置の変更がインデックスに取り込まれます。

コミットに含めたい変更をすべて取り込んだら、左のウィンドウ(インデックスのウィンドウ)に移動して :wq としましょう。
そして、:Gcommit -v すると、

見事、スタイルシートの設定の変更のみがコミットに含まれています。

ちなみに・・・

]c とか dp とかは Vim の機能です。詳しくは :help diff
ほかにもいろいろな差分の操作方法があります。

Gblame でどんどん歴史をたどれる。

fugitive には git blame のためのコマンド :Gblame があります。

ある特定の行の変更をたどりたいときは blame 側のウィンドウでその行に移動し、~ または P を押します。
~ は HEAD~ みたいな感じです。2~ で 2 世代前のコミットに移動できます。
逆に P は HEAD^ で 2^ で 2 番目の親を指定できます。

もう一度押すとさらに歴史をたどれます。

この行への変更がコミットした時点のファイルの状態をみたい場合は Enter を押します。

終了するには q か gq を押します
q だと blame が終了してもウィンドウの状態はそのままです。
gq は blame を終了してワークツリーの状態に戻ります。

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

地味に一番感動した機能。
statusline に %{fugitive#statusline()} を追加すると、ステータスラインに今いるブランチ名が表示されるようになります。