Vim插件使用Ctags更有效地解析成员函数

时间:2016-03-01 17:41:00

标签: vim ctags

说我有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这样的插件。

1 个答案:

答案 0 :(得分:1)

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

不幸的是,我只使用了不了解C ++的ctags:它无法知道调用网站指的是哪个超载。

vim-clangclang-indexer的等式。我很久没有花时间在他们身上了。我甚至不确定clang-indexer是否仍然使用最新版本的clang进行编译。我们的想法是构建一个代码数据库,并从当前代码中提取真实的上下文,以便正确识别重载等。我最后一次使用时,有时会遇到麻烦以确定当前的背景。

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