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

Vim和Ctags:在生成标记时忽略某些文件,vim,ctags,Vim,Ctags,我有一个文件夹llvm2.9,我在其中运行了这个命令 $> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ 这是llvm2.9/docs中存在的*.html文件中的索引方法。我发现了这一点,因为当我为某个类按ctrl-]时,它转到了html文件 如何强制CTAG单独使用.cpp/.h文件或忽略特定目录 谢谢vim中最简单的方法是 :!ctags {.,**}/*.{cpp,h}

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

$> ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++
这是llvm2.9/docs中存在的*.html文件中的索引方法。我发现了这一点,因为当我为某个类按ctrl-]时,它转到了html文件

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


谢谢

vim中最简单的方法是

 :!ctags {.,**}/*.{cpp,h}
说明:大括号将展开为

:!ctags ./*.cpp **/*.cpp **/*.h **/*.h 
因此,它在当前目录(
/
)或任何嵌套目录(
***/
)中查找源文件或头文件。注意
**/
与当前目录不匹配(它始终至少匹配一个子目录级别)

在壳牌:

 find -iname '*.cpp' -o '*.h' -print0 | xargs -0 ctags
说明:这将递归查找当前目录下的所有.cpp和.h文件,并将它们传递到命令行上的
ctags

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

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

另外,对于最近的bash,您可以使用

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

并获得与vim中几乎相同的行为

您可以使用
--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

我不想追踪可能在大型项目中处理的所有文件类型,我只对Python感兴趣,所以我只使用
ctags--languages=Python…
显式地处理Python文件。可以使用
ctags--list languages

查看语言名称列表。似乎80%的问题是由强制使用cpp语言引起的。为什么要这样做?否则,单击某个函数定义会将我带到一个html文件,其中列出了该文件,而不是cpp文件。你确定吗?我猜想,如果没有代码>处理HTML文件——语言强制= C++ +/COD>,首先不会在HTML中拾取C++定义。你证实了吗?另外,我想你已经看到了我的答案(我理解这个问题,我只是想挑战一下前提)相关的(这适用于exeburant CTAG,不确定常规标记程序),那么多类型呢?用逗号分隔?您能解释一下这些命令中的每一个都发生了什么吗?引用您的排除模式以避免shell扩展。