Hack #154: タグジャンプをさらに活用する
Posted at 2010/06/13ツイート
タグジャンプをさらに活用する
Hack #43ではタグについての基本的な使用方法をまとめました。 本稿ではさらに踏み込んだタグジャンプの活用法をまとめます。
親ディレクトリにあるタグファイルを指定
もし自分が/project/a/src/
というディレクトリにいた場合に、できれば/project/a/tags
や、
または全てのプロジェクト用のタグファイル(ライブラリの関数など)もタグジャンプに使いたいとします。
/project/a/src/ (現在のディレクトリ)
/project/a/tags (指定したいタグファイル)
/project/tags (指定したいライブラリ関数のタグファイル)
その場合、.vimrcには以下のように書くことで可能になります。
if has('path_extra')
set tags+=tags;
endif
こうすることで、もしタグファイルが存在するなら
/project/a/tags
や/project/tags
にある関数も<C-]>
で飛ぶことが可能になります。
また;
は+path_extra
機能がサポートされていない場合では使えないため、
has('path_extra')
で機能の有無をチェックしています。
階層数を指定
ただ;
をつけただけではルートディレクトリまでさかのぼってしまいます。
そこで;
の後に上限となる親ディレクトリを指定することができます。
if has('path_extra')
set tags+=tags;/project/a
endif
こうすることで/project/a
までで検索を終了し、/project/tags
は見つかりません。
子ディレクトリにあるタグファイルを指定
前項では親ディレクトリのtagsを指定しましたが、 今度はある特定のディレクトリにあるタグファイルを 現在のディレクトリから指定したい場合はどうすればいいでしょう。
/project/a/src/ (現在のディレクトリ)
/project/a/src/libA/tags (指定したいタグファイル)
/project/a/src/libB/tags (指定したいタグファイル2)
その場合、以下を.vimrcに書けばいいでしょう。
if has('path_extra')
set tags+=./*/tags;
endif
また、/project/a/src/libA/tags
などの1階層下のディレクトリにあるタグファイルだけではなく
/project/a/src/libA/src/tags
などの何階層か下のタグファイルを指定するには以下のようにできます。
if has('path_extra')
set tags+=./**/tags;
endif
階層数を指定
ただ**
は30階層までの深さのディレクトリにマッチするということになっています。
なので場合によっては非常に重くなるかもしれません。
その場合は階層の深さの最大値を次のように指定することができます。
(この例では3階層下のディレクトリまでマッチするように設定しています)
if has('path_extra')
set tags+=./**3/tags;
endif
親ディレクトリから**
を使う
これは前項と前々項の合わせ技です。
現在のディレクトリが/project/a/src
の時に
set tags=**;
とすると、
/project/tags
/project/a/tags
/project/a/libA/src/tags
/project/a/libB/src/tags
/project/b/tags
/project/c/tags
これら全てが指定されることになります。
つまり**;
とは、現在のディレクトリが/project/a/src
の時には
/project/a/src/**
/project/a/**
/project/**
/**
という場合に展開され、それぞれの場所から検索されます。 またこの指定は上記全ての場所から検索されるので重い処理となります。
その他色々
- この設定はHack #112: 場所ごとに設定を用意すると組み合わせると非常に相性がいいです。ぜひ合わせて使いましょう。また必ず:setでなく:setlocalを使いましょう。
- これらの指定方法は’path’, ‘cdpath’などでも使うことができます。
- 詳しくは:help file-searchingを当たってください。
もどる
blog comments powered by Disqus