VimでPerlを書くときにctagsを導入して使ってみた
コードジャンプを利用したい場合にctagsを導入するという方法がありますが、最近VimでPerlを書くときに導入してみたところ、非常に良い感じだったので、インストール方法と簡単な使い方を記しておきます。
インストールするものについて
ctagsの実装(?)にはいろいろ種類があるようですが、今も活発に開発が続いている universal-ctags
をインストールするのが良さそうです。
1. インストールする
僕の個人機のOSはUbuntu18.04なので、今回はgithub上にあるレポジトリからcloneしてきて手動でビルドしました。
$ git clone https://github.com/universal-ctags/ctags $ ./autogen.sh $ ./configure $ make $ make install
詳しいことが知りたい場合は Readme や docs/autotools.rst を見てください。 Max OSだとbrewからインストールもできるようです。
2.tagsファイルを生成する
エディタでコードジャンプできるようにするには、まず対象のコードに対してどのようなパターンの時にどのファイルのどの場所にジャンプするのか、みたいなことを定義したtagsファイルを生成する必要があります。
tagsファイルはctagsコマンドで生成できます。
今回はPerlのコードのみを対象にしているので、プロジェクトのルートディレクトリで以下のようなコマンドを実行しtagsファイルを生成します。
$ ctags -R --languages=Perl
実行すると、 tags というファイルが生成されているのが確認できます。
tagsファイルは直接プロジェクトに関係ないので、ついでに .gitignore
に追加しておくといいと思います。
注意点として、tagsファイルはコードに変更がある度に生成し直さないと正しくコードジャンプできなくなるので、コードに変更がある度に再生成する必要があります。
tagsファイルを再生成する方法はいろいろありますが、僕は git で commit した時にフック処理をさせるようにして、commitする度にtagsファイルの再生成を行うようにさせました。
Cartonを利用して開発している場合、 local/
以下に依存モジュールが入っていると思うので、依存モジュールの定義元にもコードジャンプできてより開発が捗ります。
3. Vimのキーバインドについて
- 定義元へのジャンプ :
<C - ]>
- 複数の候補がある場合の定義元へのジャンプ :
<gC - ]>
- 継承してoverrideしているようなモジュールが複数ある場合などに使います
- コードジャンプ前の位置に戻る :
<C - t>
他にもいろいろありますが、とりあえずこれらのキーバインドを覚えとくといいと思います
所感
Perlでコードを書いてると、どんな引数を渡せばよくわからなくて関数の定義元に飛びたい!、というような状況がよくあるのでとても便利です。
しかし、Mooseのシンタクスシュガーやkeywordプラグインを使っているようなモジュールには対応していないので、それらを使っている場合は別の方法でtagsファイルを生成する必要がありそうです。(CPANにそういうライブラリがあがってるっぽいのでそのうち試したい。)