LoginSignup
20
15

More than 5 years have passed since last update.

Vim で tags を使って ruby と gem のソースコードをブラウジングする(翻訳)

Last updated at Posted at 2018-11-03

Vim で gem のコードを読むにはどうすればいいかを調べていたところ、参考になる記事があったので翻訳してみました。

原著者の許諾を得て翻訳・公開します。


数ヶ月前、私はシドニーに行きました。そこで私のチームメイトの 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-rbenvvim-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-ctagsrbenv-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 を最新の状態に保つためには?

Vim のセットアップや tags についての記事やガイド:


  1. 元記事では:Rtags と記載されていましたが、現在は:Ctags というコマンドに変わっているようです。(参考:https://github.com/tpope/vim-rails/commit/b636decf2d7017aef42c18453a0ae2758ee9c2fc

20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15