避免将 C++ 对象文件添加到 Ctags 标记文件

Avoid C++ object files from being added to Ctags tags file

我使用以下命令生成我的 tags 文件,供 vim 在 C++ 项目中使用:

ctags -R --c++-kinds=+p --fields=+iamS --extra=+fq --language-force=C++ /usr/include /home/user/audioprism/lib/essentia/ --exclude=.git --exclude=/home/user/audioprism/lib/essentia/src/examples -f /home/user/audioprism/tags

在某些情况下,我看到以下内容:

# pri kind tag               file
> 1 F   v    Pool              
/home/user/audioprism/lib/essentia/bui...ia/streaming/algorithms/poolstorage.cpp.1.o               
/
  2 F   c    Pool              /home/user/audioprism/lib/essentia/src/essentia/pool.h
           namespace:essentia
           class Pool {
  3 F   v    Pool              
/home/user/audioprism/lib/essentia/src/examples/tutorial/example_onsetdetection.py
           from essentia import Pool, array

因此,:ta<Ctrl>+] 会将我带到 poolstorage.cpp.1.o,这是第一个条目。但是如何避免添加目标文件。由于整个目的是浏览源代码,我想避免这种情况。尝试了标志 --exclude=*.o,但这也没有帮助。

如何阻止将目标文件添加到 tags 文件?

你真的需要--langage-force吗?我对 lh-tags 的实验和我在 C++ 项目上的日常工作告诉我 ex-ctags 和 universal-ctags 已经能够根据扩展名自行整理 C++ 文件。当 运行 ctags 在我已转储当前缓冲区内容的临时 (extension-less) 文件上时,我可能会使用此参数。我不需要它来解析普通的 C++ 文件。我们可能还需要它来解析 C++ 标准库中的 extension-less 头文件。我非常怀疑你在做什么。

最终,我们可以简单地将分析限制为特定语言。它是 Universal Ctags 的 --languages= 选项(我不记得已弃用的 Exhuberant Ctags 是什么(/曾经)。我必须深入研究我的 lh#tags#add_indexed_ft() (vimscript) 函数的代码. 但老实说,如果您正在使用 ex-ctags,请迁移到 universal-ctags,特别是如果您使用 C++)。

使用此选项还会阻止 ctags 像解析 C++ 文件一样解析 Python 文件。你也可以要求解析 Python 个文件。