我有一个名为llvm2.9的文件夹,我在其中运行了这个命令。
$> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
这也包括了在 llvm2.9/docs 中存在的 *.html 文件中的索引方法。我发现这是因为当我按下 ctrl-] 键时,它跳转到了 html 文件。
我该如何强制 ctags 仅使用 .cpp/.h 文件或忽略特定目录。
谢谢
您可以使用--exclude='*.html'
来排除某个文件类型。
如果你需要排除的不仅仅是.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
:!ctags {.,**}/*.{cpp,h}
Explanation: The braces expand to
:!ctags ./*.cpp **/*.cpp **/*.h **/*.h
So it looks for source or header files in the current directory (
./
) or any nested directory (**/
). Note**/
wouldn't match the current directory (it always matches at least 1 sub directory level)
在Shell中:
find -iname '*.cpp' -o '*.h' -print0 | xargs -0 ctags
解释:这个命令会递归地查找当前目录下所有的 .cpp 和 .h 文件,并将它们传递给命令行上的
ctags
。
print0
和-0
的工作方式是确保它能正确地处理奇怪的文件名(例如包含空格或换行符的文件名)。
我会让其他 ctags 选项留给你自己想象 :)
PS. 对于最近的 bash,您可以使用
shopt -s globstar
ctags {.,**}/*.{cpp,h}
我不想追踪在大型项目中可能被处理的每种文件类型,我只对Python感兴趣,所以我明确地使用ctags --languages=Python ...
只处理Python文件。可以使用ctags --list-languages
查看语言名称列表。
--language-force=C++
参数处理HTML文件,将无法首先获取HTML中的C++定义。你验证过了吗?另外,我猜你已经看到了我的回答(我理解了问题,只是想挑战一下前提)。 - sehe