VimによるPHP開発で、タグファイルを使って関数の定義にジャンプする方法です。各 OS における ctags のインストール方法にも触れます。
目次
- Ctagsとは
- Exuberant Ctagsのインストール
- Windowsの場合
- MacVim Kaoriyaの場合
- Linuxの場合
- CtagsでCakePHPのタグファイルを作成する
- Vimでタグジャンプ
Ctagsとは
Ctagsは、ソースコードの定数・変数・クラス・メソッドの宣言箇所をインデックス化し、ファイルに出力するプログラムです。VimではCtagsで作成したタグファイルを取り込むことにより、メソッドなどの宣言箇所にジャンプすることができるようになります。
タグファイルを使用したタグジャンプのサポートは様々なエディタで実装されています。詳細はマニュアルをご確認ください。
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です。
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上で行う方法が便利です。