2009-11-17 18 views
8

プロジェクトの任意のサブディレクトリでvimを起動し、tagsファイルのプロジェクトルートまで検索してから、関連のないディレクトリプロジェクトツリー。例えば複雑なCTAGS検索パスを設定するためのヒント

のは、私は、次があるとしましょう:

~/projects/foo/bar/baz.c 
~/projects/foo/tags 
~/some/arbitrary/path/tags 

を、私はそれがfoo/tagsを見つけるまで検索していると、シンボルが見つからない場合はsome/arbitrary/path/tagsを検索するために、barサブディレクトリ内からbaz.cを開きたいですfoo/tags

set tags=./tags,tags; 

を最初のタスクを達成するために:

今私は私が行うことができます知っています。明らかに、vimにルートまで検索するように指示するセミコロンです。ただし、次の作業のいずれ:

set tags=./tags,tags,~/some/arbitrary/path/tags; 
set tags=./tags,tags;~/some/arbitrary/path/tags 

二つだけのプロジェクトのルートにタグファイル内のシンボルを見つけながら、最初のものは~/some/arbitrary/path/tagsからシンボルのみを検索します。

誰でもこの方法を知っていますか?私はLinuxを購入しています。

+0

うん、私はシミコロンが正しいとは思わない。現在のディレクトリにいると思いますか?試してみてください:vimの中からpwd。私は、相対パスと絶対パスの両方でカンマで区切られた複数のタグを何年も使用してきました。 – Benj

答えて

5

私が使用します。

set tags=~/.tags 
set tags+=~/.vim/tags/cpp 
set tags+=~/src/git/gitsrc/tags 
" and so on... 

特定のプロジェクトのルートにタグを生成するために:

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 

私はC++ code completion vim tipからこの設定を適応。

+1

setコマンドを複数の行に分割すると、私の問題が解決しました。私は '.vimrc'で' set tags = tags; 'で終わり、vimの中から':set tags + =〜/ some/arbitrary/path/tags'と打ちました。 –

0

チルダを家の経路に置き換えます。

+0

申し訳ありませんが、動作しません。/home/myuser/some/arbitrary/path/tags;と 'set tags =。/ tags、tags;/home/myuser/some /任意の/ path/tags' –

+0

どうやってテストしていますか?何が起こっているのですか?私は私のプログラミングディレクトリにタグファイルを作成し、.vimrcを編集して、 "set tags"にそのパスをインクルードし、チルダを開始点として使用しました。次に、ホームディレクトリにtest.cというダミーファイルを作成し(タグファイルのあるディレクトリではない)、タグファイルにリストされている関数の名前を書き、 "ctrl-"関数上にカーソルを置きます。それが起こった場所で私を連れて行った。 – Derek

+0

vimの中に手動で検索パスを設定しました。私は2つのシンボルを探してテストします。一つのシンボルは同じプロジェクト内の別々のファイルで、タグファイルはプロジェクトルートのディレクトリです。そして、任意のパス上の外部タグファイルからシンボルを探します。私が使っているパスのバージョンによっては、1つのシンボル、または他のシンボルを見つけることはできますが、両方を見つけることはできません。 –

0

あなたの最初の「タグを設定」オプションは、Linuxで私にとって役立ちます。 (以前と同じように、私はそれを再作成しました。)あなたのタグオプションには、絶対パスと相対パスの両方で多くのパスがあります。しかし、2番目のものでは、リストの中央にセミコロンがありますが、これは間違っています。実際、セミコロンは必要ありません。私はまた、あなたの家への絶対パスで〜を置き換え、セミコロンを一括して削除します。各パスの間にカンマを置いてください。

ああ、タグファイルのディレクトリを検索するには、 "../tags"ではなく "../tags"が必要です。 1つのドットは現在のディレクトリを意味し、2つのドットは現在のディレクトリを意味します。

+0

私はそれが動作するように見えないので、あなたがそれを再作成した方法を正確に投稿できますか? –

+0

プロジェクトのルートまたはサブディレクトリからファイルを開いていますか?プロジェクトのルートではなく、プロジェクトのサブディレクトリ内からファイルを開きます。 –

+0

これは私が持っているものです: タグを設定します。/タグ、タグ、タグ、タグ、〜/プログラミング/マンデルブロ/メイン/タグ ここで、最後のディレクトリは絶対パスです。上で述べたように、私は../tagsを使用していないので、親ディレクトリでは検索しません。 – Derek

0

タグファイルは常にプロジェクト/ディレクトリにありますか?そうであれば、タグファイルを見つけるために "検索する"必要はありません。ただ、ハードコードこのような両方のファイルへのパス:

set tags=/home/you/projects/foo/tags;/home/you/some/arbitrary/path/tags 

ない場合、あなたはこのような何か試すことができます。

set tags=/home/you/projects/**;/home/you/projects,/home/you/some/arbitrary/path/tags 

をあなたはそれを試してみるが必要になる場合がありますので、私はこれを試していません。それにはいくつかの前提条件があります。参照:ヘルプファイル検索。

0

セットタグ用の単一ライン構文は次のようになります。カンマの後に行方不明になった

set tags=./tags,tags;,~/some/arbitrary/path/tags 

「タグ;」

関連する問題