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を利用することで、ファイル保存時にタグを更新することができる。