Emacsをつかっていても、Eclipseみたいにタグジャンプしたい!
そんな情念に突き動かされて、タグジャンプの方法をしらべました。
Ctagsを利用する
タグジャンプを利用するためには、ctagsがRubyに対応しているようだ。
まずは、ctagsをインストール。linux mintでは以下で入る。
sudo apt-get install ctags
Exuberant Ctagsというものがctagsの代わにインストールされた?まあいいや。
ルートディレクトリで以下を実行。
ctags-exuberant -a -e -f TAGS –tag-relative -R *
TAGSが生成される。これをemacsからつかえばよい。試しに M-x find-tagsを入力して、タグジャンプが発動すればOK。
- M-. find-tags タグジャンプ
- M-* ジャンプ元に戻る。
ripper-tags で高速化
さらに改善。ctagsよりも高速なripper-tagsというものを見つけた。Emacsにも対応しているよう。
ripper-tagsは ctagsデータをより高速に生成するツール。
gem install ripper-tags
ルートディレクトリで以下を実行。
ripper-tags -e -R -f TAGS
helm-etags-selectで見やすさアップ
さらにさらに改善するには、helm-etags-selectがいいかも。 helmインターフェースで飛び先を絞り込み。C-x c e で発動。
observrで保存を自動監視
さらにさらにさらに改善。ctagsを保存するたびに作り直す。
保存の監視には、observerを利用する。observerはファイル監視用のgem. watchrをforkして作られた。
以下でインストール。
gem install observer
gem install rev
正規表現を利用して、設定ファイルを書く。 プロジェクトのルートディレクトリにスクリプト作成。(ripper.observr)
watch( 'spec/(.*)_spec\.rb' ) {system("ripper-tags -e -R -f TAGS") }
watch( 'lib/.*\.rb' ) { system("ripper-tags -e -R -f TAGS") }
監視スタート。
observr ripper.observr
素晴らしき開発環境になった。
16.12.31:追記 helm-etags+を使おう
helm-etags+のなかに含まれている、ctags-update.elを利用することで、ファイル保存時にタグを更新することができる。