2011-10-12 72 views
20

我有一個運行此命令的文件夾llvm2.9。Vim和Ctags:在生成標記時忽略某些文件

$> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ 

這是* .html文件也是其存在於llvm2.9 /文檔索引方法。我發現這一點,因爲當我按下ctrl-]某些類,它去了html文件。

如何強制ctags單獨使用.cpp/.h文件或忽略特定目錄。

感謝

+0

它似乎是問題的80%是由_forcing的language_到CPP所致。你爲什麼這樣做? – sehe

+0

否則,點擊某個函數定義需要我在那裏上市,而不是CPP文件中的HTML文件。 – excray

+0

你確定嗎?我的猜測是,處理HTML文件_without_'--language力= C++'會_not_拿起C++定義在首位的HTML中。你有證實嗎?另外,我想你已經看到了我的答案(我的理解這個問題,我只是想挑戰的前提下有點太) – sehe

回答

17

您可以排除使用 --exclude=*.html

+0

(這個工程的exeburant CTAGS,不知道的常規標籤計劃) – skeept

+3

和什麼有關多種類型的?用逗號分隔? – eddy147

3

vim的最簡單的方法是

:!ctags {.,**}/*.{cpp,h} 

說明:花括號擴展到

:!ctags ./*.cpp **/*.cpp **/*.h **/*.h 

所以它會在源文件或頭文件當前目錄(./)或任何嵌套目錄(**/)。注**/將不匹配當前目錄(它總是匹配至少1次目錄級別)

在外殼:

find -iname '*.cpp' -o '*.h' -print0 | xargs -0 ctags 

說明:此遞歸找到所有的.cpp和。 h文件,並在命令行上將它們傳遞到ctags

方式print0-0一起工作是爲了確保它怪異的文件名可以正常工作(例如,包含空格,甚至新行字符)

我會留下的ctags的選項,其餘爲你自己的想象:)

PS。對於近期的bash-ES,您可以使用

shopt -s globstar 
ctags {.,**}/*.{cpp,h} 

,並得到幾乎相同的行爲在vim!

+0

你能解釋這些命令中的每一個發生了什麼嗎? –

+0

@ still_dreaming_1我認爲是。請參閱更新 – sehe

12

如果您需要排除的不僅僅是.html文件更多的是文件類型:

不能逗號的排除選項裏面單獨的列表。這不起作用:

ctags --exclude=*.html,*.js ./* 

但是,您可以將多個排除選項:

ctags --exclude=*.html --exclude=*.js ./* 

傳遞-V選項來幫助調試:

ctags -V --exclude=*.html --exclude=*.js ./* 

給人的輸出:

Reading initial options from command line 
    Option: --exclude=*.html 
    adding exclude pattern: *.html 
    Option: --exclude=*.js 
    adding exclude pattern: *.js 
+0

引用您的排除模式以避免shell擴展。 – Walf

1

我不想追查其可能在大型項目中得到處理每一個文件類型,而我只是在Python感興趣,所以我只能明確地使用ctags --languages=Python ...處理Python文件。語言名稱列表可以使用ctags --list-languages來查看。