Vim で gem のコードを読むにはどうすればいいかを調べていたところ、参考になる記事があったので翻訳してみました。
原著者の許諾を得て翻訳・公開します。
- 英語記事: Using tags to browse ruby and gem source with Vim :: Jakub Chodounský :: The diary of a software developer
- 原文公開日: 2016/12/09
- 著者: Jakub Chodounsky
数ヶ月前、私はシドニーに行きました。そこで私のチームメイトの Andrew が RubyMineのかなり気の利いた機能を見せてくれました。彼はその機能を使い、Ruby のメソッド定義元にジャンプすることができました。それ自体はそこまで特別ではありませんでした、彼がある gem のソースコードにシームレスに移動するまでは ― 私は感動しました。
この記事では、Vim で同様のワークフローを作成し、Vim を強力な IDE に変換する方法について説明します。それではまず、プロジェクト内のメソッド宣言元にジャンプしてみましょう。
Vim でメソッド定義やシンボル間をジャンプ移動するためには、移動することができるように、ある種のマップが必要となります。これらのマップは tags と呼ばれ、今回利用するのはExuberant Ctagsです。
最も簡単な tags の生成方法は、プロジェクトのルートディレクトリで ctags -R
コマンドを実行することです。vim-railsプラグインを使っている場合は、:Ctags
1コマンドで tags を再生成することができます。guardを用いてファイルに変更があった時や、git hookで新しいコードをチェックアウトした時に自動で tags を生成するよう環境設定することもできます。私の場合は、手動での生成で十分でした。
tags 間を移動する
Vim は tags 間の移動機能が組み込まれているため、そのために新たに Vim プラグインを導入する必要はありません。私が最もよく使う2つのコマンドは、定義元に移動する ctrl + ]
と、ジャンプ元の場所に戻る ctrl + o
です。選択したシンボルに複数の tags がある場合は、ビジュアルモードでの :tselect
コマンドや、g]
コマンドを利用できます。それ以外に、:tnext
と :tprevious
を使うことができます。
もう一つの選択肢としては CtrlPを使うことです。 CtrlP はファイル名や tags を参照できるあいまい検索プラグインです。tags の移動を利用するためのコマンドは :CtrlPTag
です。
Vim はマウスモードもサポートしています。ctrl + click
で定義元に移動し、ctrl + right click
で元に戻るという、モダンな IDE に似た移動をサポートしています。
gem のソースコードにジャンプする
ここまで、プロジェクト内で tags 生成・移動についてまとめてきましたが、私にとってはここ数年間これで十分でした。しかし利用している gem 内のメソッド定義にジャンプすることはできるのでしょうか?
Vim プラグインのインストールをしない場合、bundle open
を使うと、エディタ上で gem のソースコードを参照することができます。幸運にも、我々はもっと良い方法で、利用している gem の tags を生成することができます。
そのためには、いくつかのプラグインを Vim にインストールする必要がありますー vim-rbenvと vim-bundlerです。そしてパズルの最後のピースは、 gem-ctags
と呼ばれる gem です。
以上は Vim に現在のプロジェクトで使っている gem のソースコードに移動する方法を教えるのに十分なはずです。また、 bundler をフックし、gem の更新やインストールがあった場合にはいつでも tags を再生成してくれますーしっかりしていますね。
結論
完全に機能するセットアップをするには、まず brew で Exuberant Ctagsをインストールします。
brew install ctags
Pathogenを使っている場合、.vimrc
に以下のプラグインの記載が必要です。
Plugin 'vim-ruby/vim-ruby'
Plugin 'tpope/vim-rails'
Plugin 'tpope/vim-rbenv'
Plugin 'tpope/vim-bundler'
その後、gem-ctagsと rbenv-ctagsをインストールします。
gem install gem-ctags
gem ctags
mkdir -p ~/.rbenv/plugins
git clone git://github.com/tpope/rbenv-ctags.git \
~/.rbenv/plugins/rbenv-ctags
rbenv ctags
すると Vim が強力な Ruby の IDE に変わります。これで :Ctags
1を実行することでプロジェクトの tags を生成・更新でき、ctrl + ]
を押すことでソースコードの定義にジャンプすることができます。
参考情報
Vim のセットアップに必要な重要なプロジェクト:
- gem-ctags: gem インストール時に tags を生成する
- rbenv-ctags: rbenv で Ruby をインストールする際、ruby の tags を生成する
- vim-ruby: Vim における Ruby ファイルのパスサポートを提供する
- vim-rails: tags 再生成の簡単な方法を追加する
- vim-rbenv: Vim における rbenv でインストールした Ruby ファイルのパスサポートを提供する
- vim-bundler: Vim で tags の場所を設定する
Ctags を最新の状態に保つためには?
- Git hook approach to tag generation
- guard-ctags-bundlerはファイル変更時に自動で tags 生成してくれます
Vim のセットアップや tags についての記事やガイド:
- Browsing programs with tags
- Supercharge your VIM into IDE with CTags
- Combining Vim and Ctags
- Exuberant Ctags
元記事では
:Rtags
と記載されていましたが、現在は:Ctags
というコマンドに変わっているようです。(参考:https://github.com/tpope/vim-rails/commit/b636decf2d7017aef42c18453a0ae2758ee9c2fc) ↩