在Vim中自动完成

简而言之,我正在为Vim编辑器寻找一个可用的自动完成function。 我以前曾经争辩说 ,Vim完全取代了Linux下的IDE,虽然这确实如此,但它缺less一个重要特性:自动完成。

我知道Ctrl + N , Exuberant Ctags集成 , Taglist , cppcomplete和OmniCppComplete 。 唉,这些都不符合我对“工作自动完成”的描述:

  • 如果你忘记了如何拼写class ,或Ctrl + N, Ctrl + N很好(只)。 好吧。
  • Ctags给你的雏形,但有很多缺点。
  • Taglist只是一个Ctags包装,因此它inheritance了大部分的缺点(尽pipe对于列表声明来说效果很好)。
  • cppcomplete根本没有按照承诺的方式工作,我不知道我做错了什么,或者它是否“正常工作”,并且限制是通过devise来实现的。
  • OmniCppCompletecppcomplete似乎有同样的问题,即自动完成不能正常工作。 另外, tags文件再次需要手动更新。

我意识到这样一个事实,即使现代的,全面的IDE也不能提供良好的C ++代码完成。 这就是为什么我直到现在才接受Vim在这方面的不足。 但是,我认为完成代码的基本级别并不是太多要求的,实际上对于高效使用来说是必需的。 所以我正在寻找能够完成至less以下几件事的东西。

  • 语法意识 。 cppcomplete承诺(但不提供给我),正确的,范围感知的自动完成以下内容:

     variableName.abc variableName->abc typeName::abc 

    而且,其他任何东西都是无用的。

  • 可configuration性 。 我需要指定(容易)源文件的位置,以及脚本从哪里获取自动完成信息。 事实上,我在我的目录中有一个Makefile,它指定了所需的包含path。 Eclipse可以解释其中的信息,为什么不是Vim脚本呢?

  • 最新的 。 只要我改变我的文件中的东西,我想要自动完成来反映这一点。 我不想手动触发ctags (或类似的东西)。 此外,更改应该是渐进的 ,即当我只更改了一个文件时, ctags重新parsing整个目录树(可能很大)是完全不可接受的

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

我对很多configuration和/或修补程序感到满意,但我不想从头开始编写解决scheme,而且我也不擅长debuggingVim脚本。

最后一点,我真的很喜欢Java和C#类似的东西,但是我觉得这太类似了: ctags只能parsing代码文件,Java和C#都有大量的预编译框架需要编制索引。 不幸的是, 没有IDE的开发.NET甚至比C ++更像是PITA。

试试YouCompleteMe 。 它通过libclang接口使用Clang,提供语义C / C ++ / Objective-C完成。 这很像clang_complete,但速度更快,模糊匹配。

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

还有clang_complete ,它使用clang编译器为C ++项目提供代码完成。 这个插件的疑难解答还有另外一个问题。

只要项目编译,插件似乎工作得很好,但是对于大型项目(因为它试图完全编译生成标签列表),速度非常慢。

按照要求,这里是我早些时候的评论:

看看这个:

  • Vim整合到MonoDevelop至less.net的东西..
  • OmniCompletion

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

祝你好运,快乐的编码。

我刚刚发现Eclim项目在另一个问题上 。 这看起来相当有前途,至less对于Java集成来说。

我对晚会有点迟,但autocomplpop可能会有所帮助。

你正在寻找什么样的intellisense?

insevim似乎解决了这个问题。

链接到这里的截图

有人提到code_complete?

但是你不喜欢ctags,所以这可能不是你正在寻找的…