気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

rubyで定義元メソッドへジャンプ ctags+vim-tags

ネットに情報はあるけど、サクッと設定できなかったので 情報をまとめておきます。

最新ctagsをインストール

Mac標準のctagsでは上手く動作しない場合があるとのことなのでインストール

brew install ctags

vim上での使い方

# ジャンプしたい箇所にカーソルを当てて
Ctrl + ]

# ジャンプ元に戻る
Ctrl + t

# 該当結果が複数ある場合に、リスト表示
:tjump

# 明示してジャンプ(例:Userモデルにジャンプ)
:tag User

vim-tagsの設定

vim-tagsでファイル保存時に自動で、tagsファイルを更新できるようにする。 .vimrcへ以下の設定を追加する。

NeoBundle 'szw/vim-tags'
let g:vim_tags_project_tags_command = "/usr/local/bin/ctags -f .tags -R . 2>/dev/null"
let g:vim_tags_gems_tags_command = "/usr/local/bin/ctags -R -f .Gemfile.lock.tags `bundle show --paths` 2>/dev/null"
set tags+=.tags
set tags+=.Gemfile.lock.tags

デフォルトで生成されるtags, Gemfile.lock.tagsは表示させたくないので.(dot)を付けています。

下記設定もやっておくと便利かも

" tagsジャンプの時に複数ある時は一覧表示                                        
nnoremap <C-]> g<C-]> 

定義元情報を保持するctagsファイルを作成

Rails開発をしている場合、Railsのプロジェクトルートでvimを起動して以下のコマンドを打つ。

:TagsGenerate!

:TagsGenerateでもよいのだが、私は上手く出力できなかったので、!を付けて強制的に出力。

プロジェクトルートに作成されたtagsファイル

cat .tags

#.tagsファイルの内容
!_TAG_FILE_FORMAT       2       /extended format; --format=1 will not append ;" to lines/
!_TAG_FILE_SORTED       1       /0=unsorted, 1=sorted, 2=foldcase/
!_TAG_PROGRAM_AUTHOR    Darren Hiebert  /dhiebert@users.sourceforge.net/
!_TAG_PROGRAM_NAME      Exuberant Ctags //
!_TAG_PROGRAM_URL       http://ctags.sourceforge.net    /official site/
!_TAG_PROGRAM_VERSION   5.8     //
Application     config/application.rb   /^  class Application < Rails::Application$/;"  c       class:MyConvApp
ApplicationHelper       app/helpers/application_helper.rb       /^module ApplicationHelper$/;"  m
create_client   app/helpers/google_calendar_helper.rb   /^  def create_client()$/;"     f       class:GoogleCalendarHelper

rubyではc:クラス、m:モジュール、f:ファンクションへジャンプできるようになる。

これで、メソッド名やクラス名を変えて保存した時点でtagsファイルを更新できるようになった。 これでさらにサクサク開発できますね。よっしゃ!

参考URL

macにctagsインストールして、vimでRailsのソースコード読む - Qiita
Rubyのコードを読むのが捗る技 (Vim) - Qiita
vim-tagsで快適Rubyコードリーディング - k0kubun's blog
vimでrailsのメソッドにジャンプでクッソはかどる - komagataのブログ
Vim + Rails + ctags - Qiita