git rebase -iの編集画面で、コミットごとのdiffを表示するvimプラグイン書いた

git rebase -iの編集画面で、コミットごとのdiffを表示するvimプラグイン書いた。

動機

僕はコードを書いている時に、gitのコミットを割りと雑に作成して、あとでgit rebase -iを実行して履歴を修正することが多い。

コミット履歴を編集するためのgit-rebase-todoファイルにはコミットハッシュとコミットログが表示される。 しかし、コミット履歴を変更しようとするとき、ほとんどの場合コミットログだけでは不十分で、具体的にソースにどんな変更を加えたかを確認したくなる。

gitのエディターにvimを指定しているので、git rebase -i時にvim上でgit-rebase-todoファイルが開かれるが、コミットごとのdiffはGitXのような別のアプリケーションに移動して確認していた。

これはいちいちウィンドウを移動することになって面倒なので、どうせならvim上でdiffも確認できるようになれば嬉しいと思って、そのような機能を持つプラグインを作成した。

作成したvimプラグイン

hotwatermorning/auto-git-diff

このプラグインは、rebase時のコミット履歴編集画面で、テキストカーソルがある行のコミットハッシュを認識して、Previewウィンドウ内にそのコミットとそれのひとつ前のコミットのdiffを表示する。

テキストカーソルが動くと、その移動を検知して、新しい行のコミットハッシュを認識して、自動的にdiffを更新する。

これでコミットごとの変更が簡単に確認できるようになったので、rebase作業がだいぶ快適になった。

感想

初めてちゃんとしたvimプラグイン作って公開した。いままでvimrcを自分用にカスタマイズする程度だったが、自分でプラグインを作ってみて、vimスクリプトプラグインの仕様などいろいろ勉強になった。

謝辞

いろんなvimプラグイン作者のブログとか参考にさせてもらいました。 特にid:rhysdさんのcommittia.vimは、ソースとかReadmeの書き方とかかなり参考にさせてもらいました。多謝〜〜〜。 (committia.vimがrebaseのrewordコマンドの時も使えるようになったら、rebaseの編集時に加えてrebase適用時にもdiffが見れるようになってrebase作業がさらに幸せになれそうな気がしてるので、対応したらいいなー。もしくは僕もなにかコントリビュートできたらいいなー。とか思ってます。)