Vim の新バージョンのリリースを待ち続けている、Vim 使いの「ブイ」(仮名) です。13 回目のテーマは「タグジャンプ」です。Vim でタグファイルを扱う方法について解説します。
1 Vim と ctags¶
巨大なソースコードを扱うには関数や定数の定義位置に素早くジャンプする方法が必要となります。IDE だと組み込みでそういった機能を備えている場合が多いですが、Vim の場合はタグファイルというものを用意することでそれが可能となります。
まず、ctags はあらかじめインストールしておきましょう。その上で次のコマンドを実行することにより、カレントディレクトリ以下の定義を抜き出したタグファイルを生成することができます。
$ ctags -R
タグファイルを生成したら、そのディレクトリで Vim を起動してください。Vim はデフォルトでカレントディレクトリにあるタグファイルを読み込むことができます。タグファイルが認識できているかどうかが不安な場合は、:echo tagfiles()
でチェックしてみるとよいです。Vim がタグファイルを検索するときに使用するパスは ‘tags’ オプションにより指定することができます。
定義に飛びたい場合は、ノーマルモードで <C-]>
を入力します。元に戻るときは <C-t>
です。このマッピングは :help
のときと同じです。
候補が複数ある場合、:cprevious
と :cnext
コマンドによりジャンプ先を切り替えることができます。
2 Vim と gtags¶
ctags と同様なタグファイル生成プログラムとして、gtags というのも存在します。gtags は ctags と比較して対応言語は少ないですが、高機能なのと高速なのでよく使用されているようです。
Vim は標準では gtags に対応していませんが、gtags.vim という外部プラグインをインストールすることで対応させることができます。
http://www.vim.org/scripts/script.php?script_id=893
gtags を用いて定義場所を参照するときには、当然ながらタグファイルを生成しておく必要があります。次のコマンドをタグファイルを生成したいディレクトリにて実行します。
gtags
gtags.vim をインストールすると、:Gtags {キーワード}
というコマンドが追加されます。これは、引数で与えられたキーワードの定義へジャンプするコマンドです。
:Gtags
コマンドは多用するため、任意のキーにマッピングしておくと使い勝手がよくなります。
:Gtags -r {キーワード}
とすることで、キーワードが使用されている場所を検索することができます。ちなみに ctags にはこの機能がないため、grep を併用しなければなりません。
:Gtags -f {ファイル名}
で、{ファイル名} に定義されている関数の一覧を表示できます。現在開いているファイルの関数一覧を表示したい場合は、:Gtags -f %
に簡略化することができます。
ctags のときのようにカーソル位置の単語を検索する場合、:CtagsCursor
コマンドを使用します。このコマンドもマッピングしておくとよいでしょう。
gtags.vim を使用している場合、元の位置に戻る場合は <C-o>
を使用します。<C-t>
はタグジャンプ用のマッピングなので使用できません。