EmacsのRuby環境でタグを自動生成してタグジャンプ!

    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
    

    素晴らしき開発環境になった。

    161231:追記 helm-etags+を使おう

    helm-etags+のなかに含まれている、ctags-update.elを利用することで、ファイル保存時にタグを更新することができる。

    ctags-update.el : 【多言語対応関数定義ジャンプツール】Exuberant ctagsを賢く自動更新させる