问题描述
我已经使用以下命令生成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
,但这也无济于事。
解决方法
您真的需要--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文件。