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

问题描述

我已经使用以下命令生成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 ++项目上的日常工作告诉我,前扩展名和通用扩展名已经能够根据扩展名自行整理出C ++文件。在转储当前缓冲区内容的临时(无扩展名)文件上运行ctags时,可以使用此参数。我不需要它来解析普通的C ++文件。我们可能还需要它来解析C ++标准库中的无扩展头文件。我非常怀疑这是您在做什么。

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

使用此选项还可以防止ctags将Python文件解析为C ++文件所在的位置。您还可以要求解析或不解析Python文件。