Emacs の vc-annotate

もしかしたら常識なのかもしれませんが、Emacs の vc-annotate がとても良いです。vc-annotate は vc (version control, バージョン管理システムのフロントエンド。Emacs から直接 svn {diff, commit, revert} することができる) に含まれる機能の一部です。vc-annotate を使うと、バージョン管理システム、例えば Subversion に保存された過去の履歴を気になったときにとても容易に調べることができます。

ソースを開いて M-x vc-annotate (C-x v g) すると (そのファイルがバージョン管理化に置かれて居れば) vc-annotate-mode になります。例えば Subversion で管理されている plaggerPlagger::Plugin::CustomFeed::Debug を vc-annotate したものが以下の画面です。

下半分が vc-annotate-mode です。赤が直近に編集されたもの、黄色がそれよりも少し前のもの、青は昔のもの。このように色分けでどの辺が最近編集されたかが分かります。各行には編集したユーザーとリビジョン番号が表示されています。上記の画面ですと、自分が作った aggregate() というメソッドに、リビジョン 1473 で mizzy さんが変更を加えて、更にリビジョン 1828 で miyagawa さんが編集を加えたことが分かります。miyagawa さんの変更が赤なので、直近です。

このモードで P (Prev) や N (Prev) を押すと、前後のリビジョンへソースコードを移動することができるので過去の履歴を追って誰がいつどのように変更していったかを詳細に追うことができます。該当行のリビジョンに移動したければ J です。直近に戻るのであれば W。D で diff を表示します。http://www.gnu.org/software/emacs/manual/html_node/emacs/Old-Versions.html にマニュアルがあります。

vc-mode を久しぶりに使ってみたら今まで知らなかった関数があったので調べてみたところとても便利だったという。自分が書いたプログラムを久しぶりに修正をかけようと思ったところ、過去にどのような意図で変更を加えたかが分からないことがたくさん出てきました。vc-annotate を使うことで少しずつ記憶を遡って行くことができました。