2011-10-12 75 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来查看。