【问题标题】:Avoid C++ object files from being added to Ctags tags file避免将 C++ 目标文件添加到 Ctags 标签文件中
【发布时间】:2020-09-07 09:42:42
【问题描述】:

我使用以下命令生成了我的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 文件中?

【问题讨论】:

  • 看起来你有一个单独的构建目录。你不能把那个传给--exclude吗?
  • 如果我这样做,只有第三个条目可用。第二个条目中的实际定义pool.h

标签: c++ vim ctags exuberant-ctags


【解决方案1】:

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

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

使用此选项还会阻止 ctags 解析 Python 文件,就像解析 C++ 文件一样。你也可以询问是否解析 Python 文件。

【讨论】:

  • 所以,如果我切换到universal-ctags,我可以删除--language-force=C++ 并运行相同的命令,对吗?那么上面的问题会解决吗?
  • 在所有情况下删除--language-force。请改用--languages=C++。 IIRC,ex-ctags 也应该支持它,但我不确定。现在维护了universal-ctags。这意味着它比 2009 年停止的项目更能理解 C++。从那时起,C++ 已经看到了很多新标准。 2020 标准已于几天前获得批准。
猜你喜欢
  • 2017-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多