Vim中的自动补全

简而言之,我正在寻找Vim编辑器可以正常工作的自动完成功能。我之前曾争论过,Vim完全替代了Linux下的IDE,尽管这确实是正确的,但它缺少一个重要功能:自动完成。


我了解Ctrl+ N,丰富的Ctags集成,Taglist,cppcomplete和OmniCppComplete。las,这些都不符合我对“自动完成工作”的描述:


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仅解析代码文件,Java和C#都具有庞大的预编译框架,需要对其进行索引。不幸的是,在没有IDE的情况下开发.NET比起C ++更像是PITA。


月关宝盒
浏览 664回答 3
3回答

温温酱

试试YouCompleteMe。它通过libclang接口使用Clang,提供语义C / C ++ / Objective-C补全。这很像clang_complete,但是速度更快并且具有模糊匹配。除上述内容外,YCM还为C#,Python,Go,TypeScript等提供语义完成。它还为不支持语义的语言提供基于标识符的非语义完成。

慕森卡

还有clang_complete,它使用clang编译器为C ++项目提供代码完成。该插件的疑难解答提示还有另一个问题。只要项目编译,该插件似乎就可以很好地工作,但是对于大型项目,该插件的速度却令人望而却步(因为它会尝试进行完整的编译以生成标签列表)。

HUWWW

根据要求,这是我之前给出的评论:看一下这个:Vim 至少可以集成到MonoDevelop。OmniCompletion如果要在MacOSX上使用monodevelop,此链接应为您提供帮助祝你好运,编码愉快。
打开App,查看更多内容
随时随地看视频慕课网APP