Pon De Beach

叩こう ココナッツ アゴゴ

universal-ctags で Vim からのコード参照を楽にする

備忘録

ちゃんと使えよって意味で

これはなに

関数やクラスの定義元にジャンプできるやつ。もともとは Vim に組み込まれていた機能だったが、バージョン6のリリースとともに独立したらしい。

正確に言うと universal-ctags とは、本家 ctags からフォークしたプロジェクトです。

Vim 以外のエディタでも ctags は使えます(Emacs, Sublime Text など)が、ここでは Vim についてのみ記述します。

作業環境

  • OS X El Capitan (10.11.4)
  • Vim (7.4.488)

インストール

GitHub リポジトリの README に記載されているやり方に従います。

github.com

github.com

$ brew tap universal-ctags/universal-ctags
$ brew install --HEAD universal-ctags

既に ctags を Homebrew からインストールしている場合は、アンインストールしておきます。

$ brew uninstall ctags

ctags でない理由

本家である ctags を使わない理由としては、2009年以降更新が途絶えているからです。

sourceforge.net

これでは最近生まれた言語(例えば Go 言語)では利用できないので、本家からフォークされた universal-ctags に移った次第です。

ここで回答している通り、 ~/.tags に書いても良いのですが、毎回これだと流石に辛いと思ったので……

universal-ctags は Go や Rust なんかをサポートしていますので良さがあるように見えます。

使い方

初めにプロジェクトのルートディレクトリで以下のコマンドを実行して tags ファイルを生成します。

$ ctags -R

-R オプションで再帰的にタグを生成しています。

git 管理下ではステージングファイルの候補一覧に表示されるので、 .gitignoretags を追加しておきましょう。

定義元にジャンプする

関数やクラスのインスタンスにカーソルを合わせて <C-]> を押下すると、定義元にジャンプします。定義元が別ファイルにある場合は新規バッファが開きます。元に戻る場合は <C-t> です。

画面分割する場合は、<C-w><C-]> するとよいです。

g<C-]> すると、候補が1つの場合はそのまま定義元へジャンプし、候補が複数の場合は候補一覧を表示してくれます。

TODO

tags ファイルは新しく関数を作ったりする度に $ ctags -R で更新する必要があるので、自動化する。更新のタイミングとしては :w で保存する時、 git commit する時などがよさ気。


参考:実践Vim 思考のスピードで編集しよう!(書籍)

実践Vim 思考のスピードで編集しよう!

実践Vim 思考のスピードで編集しよう!