Gundo.vim が便利

Vim では入力したものを元に戻す/やりなおす(undo/redo)が当然できる。
更に undo した所から枝分かれ(ブランチ)が出来たりする。
例えば

first
second
third
four

と入力して、最後に undo し、four を fourth と変更し、:undolist と入力すると

通番   変更数   変更時期           保存済
     4       4  10:54:02
     5       4  10:56:00

と表示する。


ただし undolist だけではどこから枝分かれしたのかが分かりにくい。
そこで Gundo.vim というプラグインを使うと undo の履歴、変更箇所の diff が見えるようになる。

 @  [5] 36 minutes ago
 |
 | o  [4] 37 minutes ago
 |/
 o  [3] 38 minutes ago
 |
 o  [2] 38 minutes ago
 |
 o  [1] 38 minutes ago
 |
 o  [0] Original

こんな感じで表示され、o の所にカーソルを移動すると変更箇所が diff として表示される。
詳しくは以下のサイトで。


とても便利だが唯一の欠点が履歴のパネルのツリー間の移動がもの凄く遅い。
原因は移動と共に diff のプレビューを呼んでいてそれが遅い。
特に開発をしている間に undolist が溜まって行くと遅さが顕著になる。


なので移動と同時にプレビューをしないというオプションを付けた。
heavenshell / gundo.vim — Bitbucket

let g:gundo_auto_preview = 0

とすると、移動とともにプレビューしない。
ではどうやって diff を見るかというと履歴パネルで 'r' を押すとプレビュー表示するようになる。
これで大分サクサク移動できるようになる。
# デフォルトはプレビュー表示をする


この変更を作者に pull request してみたが現時点で取り入れるのに否定的っぽい。
自分のリポジトリにアップしてあるし困る事はないけど、やっぱりメインの方に取り入れて欲しい。