karakaram-blog

VimによるPHP開発でCtagsを使ってタグジャンプする

 ツイート 3  シェア 1  Google+1 0  Hatena 10

vim-logo

VimによるPHP開発で、タグファイルを使って関数の定義にジャンプする方法が書かれています。各 OS における ctags のインストール方法にも触れます。

目次

  1. Ctagsとは
  2. Exuberant Ctagsのインストール
  3. Windowsの場合
  4. MacVim Kaoriyaの場合
  5. Macの場合
  6. Linuxの場合
  7. CtagsでCakePHPのタグファイルを作成する
  8. Vimでタグジャンプ

Ctagsとは

Ctagsは、ソースコードの定数・変数・クラス・メソッドの宣言箇所をインデックス化し、ファイルに出力するプログラムです。

VimではCtagsで作成したタグファイルを取り込むことにより、メソッドなどの宣言箇所にジャンプすることができます。EclipseなどのIDEではおなじみの機能です。

タグファイルを使用したタグジャンプのサポートは様々なエディタで実装されています。詳細はマニュアルをご確認ください。

Exuberant Ctagsのインストール

下記にて、各OSのインストール例を紹介します。

Windowsの場合

http://hp.vector.co.jp/authors/VA025040/ctags/

上記から32bit版バイナリをダウンロードします。
解凍したファイルを任意の場所に配置し、PATHを通します。

私はC:\app\ctags58j2binに配置しています。
コマンドプロンプトでctags.exe –versionと入力してExuberant Ctagsと表示されればOKです。

MacVim Kaoriyaの場合

MacVim KaoriYaには、Objective-C 対応 Exuberant Ctags 日本語対応版が同梱されています。
Ctagsのインストールは不要です。

そのままctagsコマンドを実行すると、OS標準のものが使用されてしまいますので、.bashrcで下記のように設定して使用します。

alias ctags='/Applications/MacVim.app/Contents/MacOS/ctags "$@"'

ターミナルでctags –versionと入力してExuberant Ctagsと表示されればOKです。

Macの場合

MacOSX 10.3からはデフォルトでctagsが入っていますが、Exuberant CtagsではないのでMacPortsから別途インストールします。

$ sudo port install ctags

MacPortsのインストール、使い方は下記の記事をご参照ください。
MacPortsの使い方まとめ

MacPortsでインストールしたctagsは/opt/local/binにインストールされます。
一方、デフォルトのctagsは/usr/binにインストールされています。

そのまま使うとデフォルトのctagsが優先されてしまいますので、.bash_profileなどで/opt/local/binの方を優先してPATHを通します。

.bash_profile例

$ vi ~/.bash_profile

PATH=/opt/local/bin:$PATH
export PATH

ターミナルでctags –versionと入力してExuberant Ctagsと表示されればOKです。

Linuxの場合

apt-get, yumなどでインストールします。

$ yum install ctags
$ apt-get install exuberant-ctags

ターミナルでctags –versionと入力してExuberant Ctagsと表示されればOKです。

CtagsでCakePHPのタグファイルを作成する

CakePHPアプリのタグファイルを作成する場合の例です。

CakePHP1.3コアライブラリのタグファイルを作成する

ctags -R --languages=PHP --langmap=PHP:.php.inc --php-types=c+f+d -f ~/.vim/tags/cakephp13.tags ~/Sites/cakephp139/cake/libs/

上記は、CakePHP1.3のコアファイルが~/Sites/cakephp139/にあり、タグファイルを~/.vim/tags/cakephp13.tagsに出力する場合の例です。

CakePHPアプリのタグファイルを作成する

ctags -R --languages=PHP --langmap=PHP:.php.inc --php-types=c+f+d -f ~/.vim/tags/cakephp_app.tags ~/Sites/cakephp_app/

cakephpのアプリケーションが~/Sites/cakephp_app/にあり、タグファイルを~/.vim/tags/cakephp_app.tagsに出力する場合の例です。

Ctagsのオプション

よく使用するオプションの説明です。詳細はマニュアルをご確認ください。

  • -R ディレクトリを再帰的に処理
  • -a tagsファイルが存在していれば追記
  • –langages カンマ区切りで出力対象の言語を指定
  • –langmap 言語名:拡張子の形式で、ファイル名と言語のマップを指定
    各言語のデフォルトはctags –list-mapsで確認
  • –php-types c:クラス、f:メソッド、d:定数、v:変数
    他の言語の設定はマニュアルをご確認ください
  • -f タグファイルの出力先を指定

Vimでタグジャンプ

vimrcの設定

autocmd FileType php set tags=$HOME/.vim/tags/cakephp13.tags,$HOME/.vim/tags/cakephp_app.tags

vimrcにてtagsファイルの読み込み先を指定します。phpファイルを開いた時のみ読み込むようにしています。
複数のtagsファイルを読み込む場合はカンマ区切りで指定します。

操作方法

  • Ctrl+] タグジャンプ
  • Ctrl+t ジャンプ元に戻る
  • :ts 他の候補を表示

ジャンプ先でさらに別の場所にジャンプして、1つずつ戻ることも可能です。

ジャンプ先が求める定義と違った場合

この場合、:tsと入力して候補を一覧表示し、番号を入力して目的の定義にジャンプします。

同一インターフェースを実装したクラスのタグジャンプの際に、「ジャンプする先が目的の定義と違う」ことはよくあります。

この件に関しては、unite-tagsプラグインを利用して、tagsファイルの選択をUnite上で行う方法が便利です。

 ツイート 3  シェア 1  Google+1 0  Hatena 10