如何获得智能的C ++自动完成功能


32

一些编辑器(例如Windows上的Visual Studio)会执行C ++自动补全功能,从而可以理解C ++。例如,给定:

#include <vector>

int main(void) {
  std::vector<int> v;
  v.i

在Visual Studio中,自动补全知道std::vector<int>以i开头的唯一方法是insert

是否可以在vim中获得这种自动完成功能?


3
YouCompleteMe插件可以学习条件自动完成,并能理解C家族语言。
alxndr

@alxndr文档对于我来说非常混乱,以防使用vundle安装。当我开始使用它时,YCM服务器崩溃了!
Abhinav Gauniyal,2015年

YCM相对来说对我来说效果很好,除非我有大量的模板(boost.geo),它将在系统中添加大量的东西。同时,我的设置很乱,很难提取YCM零件...
johannes

@yo'这个问题非常特定于在C ++中使用vim。它的解决方案可能不适用于使用Vim编写Perl的人(反之亦然)。所以C ++对我来说似乎很好;但当然,Vi和Vim Meta是讨论该问题的正确地方。
derobert

2
@AbhinavGauniyal听起来与我以前使用YCM遇到的问题相似。您在什么系统上?对于OSX,请参见此处。我没有使用MacVim,但是我用Homebrew安装了CMake。然后,我cd进入了YCM插件目录(~/.vim/bundle对我来说),然后运行./install --clang-completer
bsmith89

Answers:


28

我真的很喜欢clang_complete。它确实需要clang,并且您需要告诉它libclang在系统中的位置。在那之后,它运行得非常好。

人们可能会建议您使用YouCompleteMe,但老实说,该插件的功能实在是太肿了,并且安装步骤太多。我也多次使用过segfault Vim。我对clang_complete很满意。

这是我输入时得到的v.完整的


4
同意 我在使用YCM时遇到了很多问题(包括提到的段错误)。即使经过数小时的配置,我也无法完全发挥作用。
CharlesL 2015年

1
我有YCM服务器崩溃了无数次,期待clang_complete,这里是其他用户的相关信息:github.com/Rip-Rip/clang_complete/blob/master/doc/...
阿比纳夫Gauniyal

1
我有相反的看法。YCM运作良好(即使安装的是PITA),但clang-complete却
行不通

您可以隐藏所有这些内容,以便将代码向下看几行吗?
Matt C

@MatthewCliatt,隐藏什么?弹出菜单?代码中没有什么特别的。就是return 0在该弹出菜单的下面。
akshay '16

8

YouCompleteMe(Link)插件对我来说很棒。它使用libclang生成自动完成功能,以提供准确的完成。

它具有很多自定义功能,特别是在使用编译标志时。您可以编辑“标志生成器”,为每个项目编辑python脚本(示例)。但是,对我而言,主要优点是它支持Clang编译数据库Link!)。这意味着您可以正常地编译代码,并要求clang吐出用于编译的所有标志,并将这些标志与YouCompleteMe一起使用。如果您希望自动完成工具知道您的宏定义或系统中所有头文件的位置,而无需手动键入它,将非常方便。


3

YouCompleteMe安装起来并不难,并且对我来说非常稳定,几年前我已经从clang_complete迁移到YouCompleteMe。我同意的一件事是,它确实拥有庞大的提交历史,许多内部依赖项以及对许多您可能不关心的语言的支持,但最终仍会克隆其关联的子模块,从而肿了。那个,那仍然是YouComplemeMe的问题。

叉子工作具有特殊目的,以更好地支持C ++,你可以检查这个GIF图片,展示其关闭:

https://s3.amazonaws.com/f.cl.ly/items/1e2F0A123h331c1G0L0R/SadBart.gif

它利用了Clang能够提供的新参数信息,您可以从我的这篇文章中了解更多有关此信息:http : //nosubstance.me/articles/2015-01-29-better-completion-for-cpp/


今天,我改用coc.nvim + ccls。
pepper_chico
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.