简而言之,我正在寻找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。
clang_complete
从技术上讲,它是最可靠的,但由于缺乏缓存结果和部分编译的原因,它的速度太慢了。我必须承认,我并没有尝试所有答案,因为有些答案需要复杂且费时的设置。既然clang最终允许开发人员从C ++来源构建AST(直到现在,没有可用的C ++免费解析器),我将屏住呼吸。
clang_complete
最近尝试过吗?它现在可以libclang
与缓存一起使用,因此应该更快。
formatted like this
。)
sh
(意味着它在我的库中)开头,然后是我班级的缩写。例如shP
对于Parser
类。然后,您所需要做的就是编写shP
并按下CTRL + p(或CTRL + n,如果需要的话),并让类成员从上次使用到第一次使用(如果是CTRL + n,则从第一个使用到最后一个)