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

#include <vector>

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


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

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

评论

YouCompleteMe插件可以学习自动完成的术语,并且可以理解C系列语言。

@alxndr文档对于我来说非常混乱,以防使用vundle安装。一开始,YCM服务器就崩溃了!

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

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

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

#1 楼

我真的很喜欢clang_complete。它确实需要clang,并且您需要告诉它libclang在系统中的位置。

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

输入v.时,这就是我得到的:

评论


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

–CharlesL
2015年2月5日,12:45

我曾多次使YCM服务器崩溃,期待clang_complete,这是其他用户的相关信息:github.com/Rip-Rip/clang_complete/blob/master/doc/…

– Abhinav Gauniyal
2015年2月5日在16:12

我有相反的看法。 YCM工作正常(即使安装的是PITA),但clang-complete却从未奏效。

–Sardathrion-反对SE滥用
15年3月16日在9:12

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

–马特C
16-4-29的2:18

@MatthewCliatt,隐藏什么?弹出菜单?代码中没有什么特别的。它只是在弹出菜单下返回0。

–akshay
16年4月29日在7:28

#2 楼

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

它具有很多自定义功能,尤其是在使用编译标志时。您可以编辑“标志生成器”,为每个项目编辑python脚本(示例)。但是,对我而言,主要优点是它支持Clang编译数据库(链接!)。这意味着您可以正常地编译代码,并要求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
19年7月27日在16:45