在Vim中自动完成

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

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

  • 按Ctrl + N的作品很好(只)如果你福尔戈如何拼写class ,或while 。 好吧。
  • Ctags给你的基础,但有很多缺点。
  • Taglist只是一个Ctags包装器,因此它继承了它的大部分缺点(尽管它适用于列表声明)。
  • cppcomplete根本无法按照承诺进行工作,我无法弄清楚我做错了什么,或者它是否“正常工作”,并且限制是按设计进行的。
  • OmniCppComplete似乎与cppcomplete有相同的问题,即自动完成无法正常工作。 另外, tags文件需要再次手动更新。
  • 我意识到这样一个事实:即使现代的,全面的IDE也不能提供良好的C ++代码完成。 这就是为什么我直到现在才接受Vim在这方面的缺失。 但我认为完成代码的基本级别并不是太多要求的,实际上它是高效使用所必需的。 所以我正在寻找能够完成以下事情的事情。

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

    variableName.abc
    variableName->abc
    typeName::abc
    

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

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

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

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

    我对很多配置和/或修补程序感到满意,但我不想从头开始编写解决方案,而且我也不擅长调试Vim脚本。

    最后一点,我真的很喜欢Java和C#类似的东西,但我认为这太令人ctags了: ctags只解析代码文件,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中至少可以.net的东西..
  • OmniCompletion
  • 如果你想在MacOSX上使用monodevelop,这个链接应该会对你有所帮助

    祝你好运,快乐的编码。

    链接地址: http://www.djcxy.com/p/66215.html

    上一篇: Autocompletion in Vim

    下一篇: Scala compiler does not infer type properly