代码之家  ›  专栏  ›  技术社区  ›  Konrad Rudolph

VIM中的自动完成

  •  243
  • Konrad Rudolph  · 技术社区  · 15 年前

    简而言之,我正在寻找 工作 VIM编辑器的自动完成功能。我已经 argued before VIM完全取代了Linux下的一个IDE,虽然这是肯定的,但它缺少一个重要的特性:自动完成。

    我知道 Ctrl键 + n , Exuberant Ctags integration , Taglist , cppcomplete OmniCppComplete . 唉,这些都不符合我对工作自动完成的描述。

    • Ctrl键 + n 只有当你忘记了怎么拼写的时候才能很好地工作。 class while . 哦,好吧。
    • CTAGS 给了你一些基础知识,但是有很多缺点。
    • 标签表 只是一个ctags包装器,因此继承了它的大部分缺点(尽管它在 上市 声明)。
    • CPP-完成 只是没有按承诺的方式工作,我也不知道我做错了什么,也不知道是不是工作正确,其局限性是由设计造成的。
    • OMNIPP-完成 似乎与CPPComplete有相同的问题,即自动完成无法正常工作。另外, tags 再次需要手动更新文件。

    我意识到,即使是现代的、完整的IDE也不能提供良好的C++代码完成。这就是为什么直到现在我才接受维姆在这方面的不足。但我认为基本的代码完成水平并不是太高的要求,事实上它是生产性使用所必需的。所以我在寻找至少能完成以下事情的方法。

    • 语法意识 . CPPComplete承诺(但不为我提供),正确,范围意识自动完成以下内容:

      variableName.abc
      variableName->abc
      typeName::abc
      

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

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

    • 时至今日 . 一旦我更改了文件中的某些内容,我希望自动完成可以反映出这一点。我愿意 想要手动触发 ctags (或类似的东西)。此外,更改应该是 增量 ,也就是说,当我只更改了一个文件时,它完全是 不可接受的 对于 插件 重新解析整个目录树(可能很大)。

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

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

    最后一点,我真的很喜欢类似Java和C语言的东西,但我想这是太多的希望: 插件 只解析代码文件,Java和C都有大量需要预先编制索引的预编译框架。不幸的是, developing .NET without an IDE 甚至比C++更像一个皮塔。

    7 回复  |  直到 9 年前
        1
  •  163
  •   Valloric Michael Kristofik    9 年前

    尝试 YouCompleteMe . 它使用Clang通过LILCLAN接口,提供语义C/C++ + Objul-C完成。它很像clang_完成,但实质上更快,带有模糊匹配。

    除上述之外,ycm还为c_、python、go、typescript等提供语义完成,并为不支持语义的语言提供非语义、基于标识符的完成。

        2
  •  35
  •   Community CDub    7 年前

    还有 clang_complete 其中使用 clang compiler 为C++项目提供代码完成。还有一个问题 troubleshooting hints 对于这个插件。

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

        3
  •  7
  •   Ric Tokyo    15 年前

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

    看看这个:

    this link 如果你想在MacOSX上使用MonoDevelop,应该会有帮助

    祝您好运,编码愉快。

        4
  •  5
  •   Community CDub    7 年前

    我刚找到这个项目 Eclim 链接在 another question . 这看起来非常有前途,至少对于Java集成来说是如此。

        5
  •  3
  •   romainl    13 年前

    我参加聚会有点晚了,但是 autocomplpop 可能会有所帮助。

        6
  •  2
  •   Ric Tokyo    15 年前

    你要找的是像IntelliSense这样的东西吗?

    insevim 似乎解决了这个问题。

    链接到屏幕截图 here

        7
  •  1
  •   Johan    13 年前

    有人提到代码完成了吗?

    但你不喜欢CTAG,所以这可能不是你想要的…