【问题标题】:Vim Plugin to Resolve a Member Function More Efficiently Using Ctags使用 Ctags 更有效地解析成员函数的 Vim 插件
【发布时间】:2016-03-02 02:02:16
【问题描述】:

假设我有 N 类'定义为:

 1 class Bar0
 2 {
 3 public:
 4     void func();
 5 };
 6
 7 void Bar0::func()
 8 {}
 9 
10 class Bar1
11 {
12 public:
13     void func()
14 };
15
16 void Bar1::func()
17 {}

假设我正在使用 ctags,我的标签文件已排序,我正在将它与 vim 一起使用。当我将光标放在第 13 行的 func 上并点击 Ctrl+] 时。这将/可能将我带到第 7 行 Bar0 的成员函数 func 的定义,因为它的字典顺序在 Bar1 之前。为了解决这个问题,我可以使用 g+] 这将打开一个单独的缓冲区,我可以在其中搜索我想要的缓冲区。但是,假设func 是一个虚拟成员函数,大约有 20 个类。那时我还可以使用 Ctrl+]:tp:tn 来随机播放所有 20 个。因此,我的问题。是否有一个插件或代码可以添加到我的 .vimrc 中,以便我可以将它与 ctags 结合使用,以比通过所有可能选项进行线性搜索更快地基于其类的范围解析成员函数?我想远离像OmniCppComplete 这样的插件。

【问题讨论】:

    标签: vim ctags


    【解决方案1】:

    lh-tags 中,我包装了 ctags 结果以显示它们、在其中搜索(使用/)、过滤它们等。

    不幸的是,我只使用不懂 C++ 的 ctags:它无法知道调用站点指的是哪个重载。

    这就是vim-clangclang-indexer 的作用所在。我已经很久没有在他们身上花时间了。我什至不确定 clang-indexer 是否仍然可以使用最新版本的 clang 进行编译。这个想法是建立一个代码数据库,并从当前代码中提取真实的上下文,以便正确识别重载等。我上次使用时,有时很难识别当前上下文。

    请注意,YouCompleteMe 应该能够跳转到函数声明,并且在最佳情况下跳转到函数定义,即与当前文件在同一个翻译单元中。

    【讨论】:

    • 如果使用 clang-indexer,我会假设构建索引相当昂贵,并且可能会像 Visual Studio 中的智能感知一样减慢打开 vim 的速度?生病得看看。此外,我目前正在使用 YouCompleteMe,但我注意到它在大型代码贝司上效果不佳。目前的工作还没有像他们应该的那样模块化他们的组件。
    • 构建,或者更准确地说是维护,索引不必是广泛的。第一次需要索引整个项目。然后,只有更改的文件。我必须承认我不记得 clang-indexer 的内部结构。 ^^'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-14
    • 2015-10-07
    • 2019-10-16
    相关资源
    最近更新 更多