VIM的omnicomplete自动完成功能并不像预期的那样工作。如何在INSERT模式下触发omnicomplete/auto-completion键击?
有没有办法让它变得更聪明?就像监视环绕文字的上下文一样? (例如,如果在评论或引用内不触发)
我问,因为与自动完成/ IDE中的IntelliSense(如Visual Studio,IntelliJ,Sublime和Atom)中的IntelliSense相比,切换到Vim后无法获得愉快的地方(过去我已经将这些用于开发)。
的基本目标,这个问题:
- 可以Omnicomplete在INSERT模式A-ZA-Z按键被触发?我已经通过“。”触发了它。点符号。
- 如何获取Omnicomplete插入func的参数?
我是Vim新几个月,拼命试图获得顺畅的工作流程。但是如果没有一个很好的自动完成选项,虽然迫使我在学习我尝试使用的代码时更加警惕,但它比我过去使用的其他IDE慢得多。
Atom + Go-Plus
让我们用Atom + Go-Plus检查我的期望。
我有一个名为func generate(entropy chan<- uint64)
的func位于同一包中另一个Go文件的其他地方。
当我在第22行中键入字母g
,我立即得到一个提示与相克开始的一切:
正如你可以看到,有3个选项,立即弹出(在前两个我认为只是代码片段)。我可以使用箭头键向下滚动到任一选项。
如果我选择第三选项(或者,如果我继续键入gen
领域范围缩小到只有1个选项),press enter
的Atom/Visual Studio中/崇高所有填写方法的细节对我来说:
我没有输入任何上述内容。它被插入,我可以覆盖细节,修改它们,或者仅仅关闭并继续输入。
的Vim + VIM-围棋(真的Omnicomplete)
我们来比较一下与omnicomplete
我目前(也许坏了吗?)配置。我有这个在我的.vimrc:
set completeopt=longest,menuone
在VIM,如果我输入gen
,我得到的是什么似乎是我的,我在这个缓冲输入别处以前输入的文本(只有在该缓冲区,而不是其他缓冲区)。如果我碰巧拼错了某些东西,我会得到我之前输入的用于打开vim的生活的拼写错误版本。这告诉我有在工作中没有智能感知/自动完成 - 只是一些监视我让击键:
正如你所看到的,自动完成不工作,因为我打字。尽管如此,在其他地方也可以使用评论和字符串,我很喜欢vim如何记住我输入的自由文本。
不确定Vim选项是否启用此功能;但是,它不是自动完成的。现在
,我可以按CTRL-X + CTRL-O
强制自动完成,并得到generate()
展现出来:
这是更好的;但是,我希望它会在我输入时向我显示自动完成选项:不需要3次额外的击键来实现它。这是整个编程几个小时内发生的大量C-x C-o事件。
有没有办法让Vim在INSERT模式下监视我的按键,并在有匹配的ctag或函数时显示自动完成?这可能是此功能的答案。
自动完成功能与参数
有与omnicomplete
自动完成,我可以忽略上述的CX共同需求,如果这工作了第二个问题:一旦我做选择我要自动完成的方法,它不会插入我的参数/字段。
让我们再回到上面的截图中,如果我选择的方法,这就是我得到:
注意它不会插入的FUNC的paramters。它与上面发布的第二张图片不匹配,Atom,Sublime和Visual Studio中的自动完成全部通过参数显示完成该方法。
我已阅读vim维基,并试过set completeopt
的各种选项,没有任何可行的选择。
例如,set completeopt+=preview
让我选择后的预览窗口:
为什么让我在预览中的参数,它仍然无法自动完成我的代码line 22
通常是一种分心(我通常会禁用它,因为我输入的速度比不停地“查找”的速度快得多)。
它花了很多的配置文件的调整,以获得下面的工作;但是,我能够使“点”自动完成工作。因此,有某种形式的自动完成的工作的:
但同样,它不填入参数,一旦我选择一个功能,这是非常恼人必须键入ESC + back arrow + back arrow + : + GoDoc
只是为了看看它是什么:这是10个字符笔画,看看它是什么。
当然,原子,崇高和VS是更漂亮时,“点自动填充”:
(它也更好地类型排序的,但我确实有vim的设置要记得上次使用在顶部,这有助于)。但我不关心漂亮 - 我只是希望我的参数在用'点'选择时显示出来。
任何有关如何调整vim-go和相关插件的建议都会非常受欢迎,因为我宁愿在Vim中使用任何IDE。谢谢。
编辑:
我看到the author of vim-go
对参数完成部分工作,并得到了它的工作:
虽然,我似乎无法得到它的工作我的安装(仍在调试它),我想向其他人展示确实可以通过填充参数来实现自动完成。
1的Vim是一个文本编辑器,而不是一个IDE。如果您需要/需要IDE功能,请使用IDE。 2. Vim只做*手动*完成,而不是*自动*完成。 – romainl
2017年秋季,仍然是故事的寓意是停止尝试让vim像IDE一样工作。 Vim是一个很棒的文本编辑器,但是很遗憾我们需要IDE来高效地工作。在经过THAT STEEP学习曲线并尝试了几十个插件之后,会得到一个Vim,它会突出显示包含几百个LOC的文件(阅读:真实生活代码)。完成和intellisense似乎只能在精心策划的演示中工作:( – Ejaz