如何让Vim在访问STL容器时识别对象类型,以实现自动完成

Vin*_*Pii 3 c++ vim stl autocomplete

我有omnicppcomplete插件和繁琐的ctags,我使用以下命令为项目生成标签:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
Run Code Online (Sandbox Code Playgroud)

我想要实现的是让Vim在通过STL容器访问它时识别对象的类型,为我提供适当的自动完成建议列表.

例如,假设IntWrapper对象有一个getTheInt()方法,我有一个向量IntWrappers:

std::vector<IntWrapper> wrappers;
Run Code Online (Sandbox Code Playgroud)

如果我有以下代码:

for (size_t i = 0; i < wrappers.size(); i++) {
    wrappers[i].<VIM Cursor is here>
}
Run Code Online (Sandbox Code Playgroud)

我希望VIM理解wrapper [i]是类型的,IntWrapper并且给我getTheInt()作为第一个自动完成选择的方法以及文档,就像我直接在IntWrappers对象上操作一样.

为了弄清楚我的期望,下面的第一个截图是当我要求对向量自动完成时会发生什么,第二个是当我直接访问对象时会发生什么,以及即使使用stl容器我也想要实现的.

表达未找到

(上面用红色突出显示的句子表示未找到表达式)

工作

有没有插件(我不关心CPU昂贵)这样做?

非常感谢.

Nic*_*tfm 5

实际上,我认为omnicomplete无法处理上下文问题,因此您无法将其用于您的目的.一种做C++/STL自动完成的方法是使用clang_complete(或这里).

虽然性能似乎很成问题(请看这里:如何提高clang_complete的完成速度?).

关于这个主题的一个很好的教程(为C++ STL完成配置vim + clang)可以在这里找到:http://zwiener.org/vimautocomplete.html

参考:

注意:另一个选择是使用gccsense,这是一个使用GCC代码分析器的独立工具.以下是项目主页的链接:http://cx4a.org/software/gccsense/ 以及有关其使用的两个SO问题:

  • `clang_complete`使用python绑定,并且正在进行大量工作,对于计划使用它们的任何人,我建议保持接近trunk版本. (2认同)