imenuで関数定義に飛ぶ

Emacsではimenuという機能があって(多分デフォルトで使える)、M-x imenuとするとそのバッファの中にある関数に飛ぶことができます。C, Ruby, Schemeなど色々な言語で使えて、しかも事前準備も必要ないので結構便利です(C言語でもっと本格的なものならetagsとか使った方がよさげ)。

ただ、imenuは最初に呼ばれたときにそのバッファを解析して、次回以降も最初のときの結果を使うので、新たに作成した関数は選択できません。例えばfunc1, func2という関数があるバッファでimenuを実行し、次にfunc3を作ってからもう一度imenuを実行してもfunc3は候補になりません。そんなときは関数名を入れるところ(Index item: )で*Rescan*と入れます。すると現在のバッファをもう一度解析してくれるので、もう一回M-x imenuすればfunc3も候補に出てくるようになります。

この*Rescan*を毎回打つのが結構面倒だなー、と思っていたのですが、

 (setq imenu-auto-rescan t)

としておけばよいことがわかりました。これでもっと便利に使えそうです。

あと、imenu-after-jump-hookを使えば関数に飛んだときに実行することを登録できます。自分の場合は

(setq imenu-after-jump-hook (lambda () (recenter 10)))

として、飛んだときにその関数が10行目に見えるようにしています。関数定義の直前数行にはその関数のコメントがあるためです。