2012-12-29 64 views
0

ctags從層次結構中的目錄標記符號還是僅限於爲當前目錄和子目錄創建標籤?如何在vim中實現跨目錄的符號引用?

基本上我正在尋找像符號交叉引用它的Visual Studio是非常有助於理解外來源代碼流。

如果不是Vim,那麼我應該使用哪種編輯器?

謝謝

回答

2

Ctags只會遞歸到子目錄。但是,您只需在項目主目錄中運行ctags -R .,它將爲您的整個項目創建一個tags文件。

+0

是的,這是正確的,但是當我打開一個文件說proj/dir1/def.c並按ctrl +]在proj/dir2/abc.c中定義的函數名稱,我找不到標籤:( – rsjethani

+1

ctags生成相對路徑名,所以你的vim當前目錄應該是'proj',以便標籤文件指向正確的文件。也許你可以編寫一個腳本來調整'tags'文件的內容以指向絕對路徑名字,但我沒有嘗試過。 –

0

ctags(以及至少exctags)可以爲所需的目錄樹創建標籤。只需運行

exctags -R dir1 dir2 ... 

然後vim知道你需要的所有符號。例如,除了您自己的源目錄之外,其中一個目錄可能是/usr/include

確保雖然它有類似的用戶界面,要求它做的事情,從創建的tags文件英寸

1

同一目錄下運行vim path/to/file.c,所以實際上你需要指定「下去目錄」,我發現cscope是一個非常好的工具,它可以完成ctags所做的所有工作,並且可以做得更多。

2

您不限於在Vim中指定一個標籤文件。這是其他答案的替代方案;你可以這樣做:

set tags=tags,~/wintags,c:/path/to/moretags/etc 

所以,當你只是想更新你的本地標籤時,你不需要花時間重新生成一個單一的標籤文件。

關於另一個答案OP的評論,

肯定這就是正確的,但是當我打開一個文件,說凸出/ DIR1/def.c,然後按Ctrl +]在其上定義的函數名在凸出說/ DIR2/abc.c,我得到的標籤沒有找到:(

你也可以在「凸出」根目錄中創建您的所有項目中的一個標籤文件:

set tags=tags;c:/path/to/proj 

這將使用第一個文件名爲tags,它從您所在的位置走過目錄層次結構時發現它。

你可以將這兩種技術結合起來,使項目本地標籤文件,然後是一個「全局」標籤文件,並不經常更新。

相關問題