ソフトウェア開発している時って、 「こっちからあっちの関数をなんか呼んでるんだけど結局そこで何をしてんのー?」 ってことでそこの関数を見に行くわけですけど、 まあ、そういう時、Emacsとかならタグジャンプするよねってお話。
自分はRailsの開発をしていたりするので、 とりあえず Exuberant Ctagsを導入。
MacでMacPortsを使っていると多分
$ sudo port install ctags
で入ってくる。
Ubuntuだときっと
$ sudo aptitude install exuberant-ctags
でいけるんじゃないかな
これでRubyにも対応したctagsが使えるようになると。
で、Emacs用に
$ ctags -e app/**/*.rb lib/*.rb vendor/plugins/**/*.rb
でTAGファイルを出力。 それぞれのgemの中身までは追い掛けなくていいよね。 pluginも見ないでいい気がするけど。
これでTAGSって名前で、Emacs用のタグファイルができると。
ちっちゃいプロジェクトだと適当に
$ ctags -e **/*
したりするけど。
んでまあ適当にプロジェクト内のrbファイルでも開いて 関数を呼び出しているところで M-. したら find-tag が呼ばれて、TAGファイルの中で最初に見付かったその関数にジャンプするよ。
他にも色々あるから軽くまとめてみた
| M-. | find-tag | 入力した名前の関数にジャンプ |
| M-* | pop-tag-mark | 元のところに戻る |
| C-u M-. | find-tag(引数付) | M-. した後に使うと次の同名の関数に飛ぶ |
| C-M-. | find-tag-regexp | 正規表現で関数を探してジャンプ |
| C-x 4 . | find-tag-other-window | 入力した名前の関数のところに別windowでジャンプ |
| C-x 5 . | find-tag-other-frame | 入力した名前の関数のところに別frameでジャンプ |
他にもtags-searchとかあるみたいだけど、よくわかんないからいいや。
でまあ、etagsのジャンプも悪くないんだけど、 なんかもっとなーい? ってことで調べたら anuthing-c-etags-select とかいう関数がanything-config.elにあるらしいじゃないですか。
と思って使おうとしたら、 自分の使っているEmacs22で使えなかったりしたけどなんとかした。
ってことで
M-x anything-c-etags-select
から選べるようになった。
あとは、デフォルトのキーバインドがなんか気に入らないので、 それも変えてみる。
M-. はともかくとして、C-u M-. はちょっとめんどいもん。 C押して離してM押してーは、ね。
(defun find-tag-next () (interactive) (find-tag last-tag t)) (global-set-key (kbd "M-g .") 'find-tag-regexp) (global-set-key (kbd "C-M-.") 'find-tag-next) (global-set-key (kbd "M-,") 'find-tag-other-window) (global-set-key (kbd "M-g M-.") 'anything-c-etags-select)
ってことで、こんなんになった。
| M-. | find-tag |
| M-* | pop-tag-mark |
| M-g . | find-tag-regexp |
| C-M-. | find-tag-next |
| M-, | find-tag-other-window |
| M-g M-. | anything-c-etags-select |
本当はM-,は別のキーバインドがあてられてるけど、 それを使う機会が無さそうなので、
あと、 C-x 4系は基本的に hogehoge-other-window が、 C-x 5系には hogehoge-other-frame が割り当てられてるけど、 そんなんガン無視していいよね。 特にC-x 5系は、単一フレーム派だから関係ないし。

