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プラグイン
このプラグインは、rebase時のコミット履歴編集画面で、テキストカーソルがある行のコミットハッシュを認識して、Previewウィンドウ内にそのコミットとそれのひとつ前のコミットのdiffを表示する。
テキストカーソルが動くと、その移動を検知して、新しい行のコミットハッシュを認識して、自動的にdiffを更新する。
これでコミットごとの変更が簡単に確認できるようになったので、rebase作業がだいぶ快適になった。
感想
初めてちゃんとしたvimプラグイン作って公開した。いままでvimrcを自分用にカスタマイズする程度だったが、自分でプラグインを作ってみて、vimスクリプトやプラグインの仕様などいろいろ勉強になった。
謝辞
いろんなvimプラグイン作者のブログとか参考にさせてもらいました。 特にid:rhysdさんのcommittia.vimは、ソースとかReadmeの書き方とかかなり参考にさせてもらいました。多謝〜〜〜。 (committia.vimがrebaseのrewordコマンドの時も使えるようになったら、rebaseの編集時に加えてrebase適用時にもdiffが見れるようになってrebase作業がさらに幸せになれそうな気がしてるので、対応したらいいなー。もしくは僕もなにかコントリビュートできたらいいなー。とか思ってます。)