2009-11-17 68 views
8

我希望能夠在我的項目的任意子目錄中啓動vim,並讓它搜索tags文件的項目根目錄,然後在外部不相關的目錄中搜索項目樹。設置複雜CTAGS搜索路徑的提示

例如,讓我們說我有以下幾點:

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

我想從bar子目錄中打開baz.c,才能在搜尋時發現foo/tags,然後搜索some/arbitrary/path/tags如果找不到符號在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

嗯,我不認爲該simicolon是正確的。你確定你在當前目錄中,你認爲你在?嘗試:從vim內的密碼。多年來,我一直使用多個標記,用逗號分隔,並使用相對路徑和絕對路徑。 – Benj 2009-11-18 17:26:20

回答

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'。 – 2009-12-07 07:39:15

0

用您的家的路徑替換代字號。

+0

對不起,不起作用。我試過'set tags =。/ tags,tags,/ home/myuser/some/arbitrary/path/tags;'和set tags =。/ tags,tags;/home/myuser/some/arbitrary/path /標籤' – 2009-11-17 15:01:53

+0

你怎麼測試它?究竟發生了什麼?我在我的一個編程目錄中創建了一個標籤文件,編輯我的.vimrc文件以在「set tags」中包含該路徑,使用代字號作爲起點。然後,我在我的主目錄中創建了一個虛擬文件test.c(因此,不在帶有標籤文件的目錄中),編寫了將列在標籤文件中的函數的名稱,並按下「ctrl-」 「將光標放在該功能上。在我認爲應該達到的地方。 – Derek 2009-11-17 15:06:39

+0

我在vim中手動設置搜索路徑。我通過查找兩個符號進行測試,其中一個符號來自同一項目中的單獨文件,其標記文件是項目根目錄中的幾個目錄,然後從任意路徑的外部標記文件中查找符號。根據我使用的路徑版本,我會找到一個符號,或者另一個,但從來都不是。 – 2009-11-17 22:01:30

0

您的第一個「設置標籤」選項適用於Linux。 (就像之前我做過的那樣,我只是重新創建了它。)在標記選項中可以有許多不同的路徑,包括絕對路徑和相對路徑。但是,在第二個中,列表中間有一個分號,這是不正確的。事實上,你不需要任何分號。我也會用絕對路徑替換〜以防萬一,並將分號全部刪除。每條路徑之間只有逗號。

哦,要搜索標籤文件的目錄,您需要「../tags」,而不是「./tags」。一個點表示當前目錄,兩個點表示目錄與你所在的位置相同。

+0

你能發佈到底是如何重新創建它,因爲我似乎無法讓它工作。 – 2009-11-17 15:04:43

+0

您是從項目根目錄還是從子目錄打開文件?我從項目的子目錄中打開文件,而不是項目根目錄。 – 2009-11-17 15:06:43

+0

這是我的: 設置標記=。/標記,。/標記,標記,標記,〜/ programming/mandelbrot/main /標記 最後一個目錄是絕對路徑。正如我上面提到的,它不會搜索任何父目錄,因爲我沒有使用../tags。 – Derek 2009-11-17 15:08:35

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 

逗號是後失蹤的「標籤」;