Vim和Ctags:生成标签时忽略某些文件

exc*_*ray 26 vim ctags

我有一个文件夹llvm2.9,我在其中运行此命令.

$> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
Run Code Online (Sandbox Code Playgroud)

这也是*.html文件中的索引方法,也存在于llvm2.9/docs中.我发现了这个,因为当我按某个类的ctrl-]时,它转到了html文件.

我如何强制ctags单独使用.cpp/.h文件或忽略特定目录.

谢谢

ske*_*ept 23

您可以使用排除文件类型 --exclude=*.html

  • 那么多种类型呢?用逗号分隔? (3认同)

小智 16

如果您需要排除的不仅仅是.html文件:

您无法用逗号分隔排除选项中的列表.这不起作用:

ctags --exclude=*.html,*.js ./*
Run Code Online (Sandbox Code Playgroud)

但是,您可以传递多个排除选项:

ctags --exclude=*.html --exclude=*.js ./*
Run Code Online (Sandbox Code Playgroud)

传递-V选项以帮助调试:

ctags -V --exclude=*.html --exclude=*.js ./*
Run Code Online (Sandbox Code Playgroud)

给出输出:

Reading initial options from command line
  Option: --exclude=*.html
    adding exclude pattern: *.html
  Option: --exclude=*.js
    adding exclude pattern: *.js
Run Code Online (Sandbox Code Playgroud)

  • 引用您的排除模式以避免 shell 扩展。 (2认同)

seh*_*ehe 6

vim 中最简单的方法是

 :!ctags {.,**}/*.{cpp,h}
Run Code Online (Sandbox Code Playgroud)

说明:大括号扩展为

:!ctags ./*.cpp **/*.cpp **/*.h **/*.h 
Run Code Online (Sandbox Code Playgroud)

./因此它会在当前目录 ( ) 或任何嵌套目录 ( )中查找源文件或头文件**/。注意**/不会匹配当前目录(它总是匹配至少 1 个子目录级别)

在外壳中:

 find -iname '*.cpp' -o '*.h' -print0 | xargs -0 ctags
Run Code Online (Sandbox Code Playgroud)

解释:这会递归地查找当前目录下的所有 .cpp 和 .h 文件并将它们传递到ctags命令行。

print0协同工作的方式-0是确保它能够正确处理奇怪的文件名(例如包含空格甚至换行符)

我将剩下的 ctags 选项留给您自己想象:)

附言。对于最近的 bash-es,您可以使用

 shopt -s globstar
 ctags {.,**}/*.{cpp,h}
Run Code Online (Sandbox Code Playgroud)

并获得与 vim 中相同的行为!