Vim和Ctags:在生成标记时忽略某些文件
我有一个文件夹llvm2.9,我在其中运行了这个命令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}
$> 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扩展。