在Vim中的自动补全

简而言之,我正在为Vim编辑器寻找工作自动补全功能。我已经认为前, Vim完全取代了Linux下的IDE,虽然这当然是真的,但它缺乏一个重要的功能:自动补全。

我知道Ctrl+N蓬勃的Ctags整合标记列表cppcompleteOmniCppComplete。唉,这些都不符合我对“工作自动完成”的描述:

  • 如果你忘记了如何拼写classwhile< kbd > Ctrl < / kbd > + < kbd > N < / kbd >工作得很好(只有)。哦。
  • Ctags给了你基本的,但有很多缺点。
  • 标记列表只是一个Ctags包装器,因此继承了它的大部分缺点(尽管它适用于清单声明)。
  • cppcomplete根本不像承诺的那样工作,我不能找出我做错了什么,或者它是否“工作”正确,限制是通过设计的。
  • OmniCppComplete似乎和cppcomplete有同样的问题,即自动补全不能正常工作。此外,tags文件再次需要手动更新。

我知道,即使是现代的、成熟的ide也没有提供好的c++代码补全功能。这就是为什么直到现在我都接受了Vim在这方面的不足。但是我认为基本级别的代码完成要求并不过分,实际上是高效使用所必需的。所以我在寻找至少可以完成以下事情的东西。

  • < p > 语法意识。Cppcomplete承诺(但没有为我实现)正确的、范围感知的自动完成以下功能:

    variableName.abc
    variableName->abc
    typeName::abc
    

    实际上,其他任何东西都是完全无用的

  • < >强可配置性> < /强。我需要指定源文件的位置,以及脚本从哪里获得自动完成信息。事实上,我的目录中有一个Makefile,它指定了所需的包含路径。Eclipse可以解释其中的信息,为什么不能用Vim脚本呢?

  • < >强现代化程度> < /强。只要我在我的文件中改变了一些东西,我希望自动完成能反映这一点。我做想手动触发ctags(或类似的东西)。此外,更改应该是incremental,即当我只更改了一个文件时,ctags重新解析整个目录树(可能很大)完全是不可接受的

我忘记什么了吗?请随时更新。

我对相当多的配置和/或修补工作都很熟悉,但我不想从头开始编写解决方案,而且我不擅长调试Vim脚本。

最后一点,我真的希望Java和c#也能有类似的东西,但我想这太不可能了:ctags只解析代码文件,Java和c#都有巨大的、预编译的框架,需要被索引。不幸的是,没有IDE开发。net甚至比c++更像一个PITA。

124370 次浏览

你想要的是智能感知之类的东西吗?

insevim似乎解决了这个问题。

链接到截图在这里

根据要求,以下是我之前的评论:

来看看这个:

这个链接应该帮助你,如果你想在MacOSX上使用monodevelop

祝你好运,快乐编码。

我刚刚发现项目< >强Eclim < / >强链接在另一个问题。这看起来很有前途,至少对于Java集成来说是这样。

还有< >强clang_complete < / >强,它使用clang编译器为c++项目提供代码补全。这个插件的故障诊断提示还有另一个问题。

这个插件似乎在项目编译时工作得很好,但对于大型项目来说速度非常慢(因为它试图进行完整的编译来生成标签列表)。

我有点晚了,但autocomplpop可能会有帮助。

有人提到code_complete吗?

但你不喜欢标签,所以这可能不是你要找的…

YouCompleteMe试试。它通过libclang接口使用Clang,提供语义C/ c++ /Objective-C补全。它很像clang_complete,但是速度更快,并且带有模糊匹配。

除此之外,YCM还为c#、Python、Go、TypeScript等提供语义补全。它还为没有语义支持的语言提供了非语义的、基于标识符的补全。