vim ctag导致了对乐趣的错误定义

vim ctag leading to the wrong definition of fun

本文关键字:错误 定义 ctag vim      更新时间:2023-10-16

我正在使用 vim 的 ctag 来浏览 c++ 代码。在许多情况下,它工作正常。但是在以下情况下会出现一些错误:

vector<int> v;
v.push_back(10);

当我从这里的"push_back"导航时,它会将我带到/usr/include/c++/4.4.7/bits/basic_string.h 的 push_back()

我想知道这是 vim/ctag 的错误还是缺点?

谢谢!

Vim 的标签导航不是语法树感知的。默认情况下,它会跳转到标签文件中的第一个匹配标签。

ctags 只是跳到第一个匹配的标签:"push_back()"。它不知道"v"的类型是"std::vector"。解决此问题的唯一方法是不使用 ctags。我尝试了不同的 vim 插件,但其中大多数都无法正常工作或根本不适用于 c++。

有插件clang_complete和YouCompleteMe,它们使用clang C++编译器来生成语法树。它们用于自动完成,但它们还提供在 C++ 代码中导航的功能。YouCompleteMe比clang_complete快得多,但我认为安装和配置它更困难。

https://github.com/Valloric/YouCompleteMe

https://github.com/Rip-Rip/clang_complete