How to trigger omnicomplete/auto-completion on keystrokes in INSERT mode?
VIM的全能自动补全功能无法按预期工作。
有没有办法使它更聪明?例如,监视环绕文本的上下文? (例如,如果在评论或引号内,请勿触发)
我之所以问是因为,与Visual Studio,IntelliJ,Sublime和Atom等IDE中的自动完成/ IntelliSense相比,自从切换到Vim以来,我到处都不开心(我过去将所有这些都用于开发) 。
此问题的基本目标:
- 可以在INSERT模式下在A-Za-z击键上触发Omnicomplete吗?我已经通过"。"触发了它。点符号。
- 如何使Omnicomplete插入func的参数?
我刚接触Vim几个月了,他拼命地试图获得一个平稳的工作流程。但是,如果没有好的自动完成选项,虽然迫使我更加警惕地学习要使用的代码,但与过去使用的其他IDE相比,这非常缓慢。
Atom Go-Plus
让我们用Atom Go-Plus检验我的期望。
我有一个名为
当我在第22行输入字母
如您所见,有3个选项会立即弹出(我认为前两个只是代码段)。我可以使用箭头键向下滚动到任一选项。
如果我选择第三个选项(或者如果我继续键入
我没有输入以上任何内容。它已插入,我可以覆盖详细信息,对其进行修改,或者仅单击TAB键并继续输入。
Vim Vim-Go(真正的Omnicomplete)
让我们将其与我当前的
set completeopt=longest,menuone
在vim中,如果我键入
如您所见,当我键入内容时,自动完成功能不起作用。但是,这确实在其他地方可以方便地使用注释和字符串,而且我有点像vim记住我键入的自由文本的方式。
不太确定哪个Vim选项启用了此功能;但是,它不是自动补全。
现在,我可以按
这样更好;但是,我希望它在输入时能显示自动完成选项:不需要3次额外的击键即可实现。在整个编码的几个小时中,发生了很多C-x C-o事件。
有没有办法让Vim在INSERT模式下监视我的击键并在有匹配的ctag或函数的情况下显示自动完成功能?这可能是此功能的答案。
自动完成参数
使用
回到上面的屏幕截图,如果我选择该方法,这就是我得到的:
请注意,它不会插入功能的参数。它与上面发布的第二张图片不匹配,在第二张图片中,Atom,Sublime和Visual Studio中的自动完成功能均使用显示的参数来完成该方法。
我已经阅读了vim wikia,并尝试了
例如,
为什么要在预览中给我参数,它仍然不能自动完成我的
需要花很多时间来调整配置文件才能使以下内容正常工作;但是,我能够获得"点"自动补全功能。因此,存在某种形式的自动完成功能:
但是同样地,一旦我选择了一个很烦人的函数,就不得不输入
"点自动补全"时,肯定,原子,崇高和VS更漂亮:
(最好按类型排序,尽管我确实有vim设置来记住顶部使用的最后一个,以便有所帮助)。但我不在乎漂亮-我只想在使用"点"进行选择时显示参数。
任何有关如何调整我的vim-go和相关插件的建议都将受到欢迎,因为我希望在任何IDE上都与Vim保持在一起。谢谢。
编辑:
我看到
尽管,我似乎无法在安装中正常运行(仍在调试它),但我想向其他人展示确实可以通过填充参数来自动完成。
Can Omnicomplete be triggered on A-Za-z keystrokes in INSERT mode?
您可以收听
1 2 3 4 5 6 7 | function! OpenCompletion() if !pumvisible() && ((v:char >= 'a' && v:char <= 'z') || (v:char >= 'A' && v:char <= 'Z')) call feedkeys("\\<C-x>\\<C-o>","n") endif endfunction autocmd InsertCharPre * call OpenCompletion() |
此外,您还应该
要进一步阅读,请
How to get Omnicomplete to insert the func's parameters?
我使用sublime已经好几年了,它代表了带有代码片段的内置函数(默认为vim omnicompletion)。因此,如果要将参数插入到缓冲区中,则需要:
如果您通过使用所谓的预览窗口的方式改变主意,则上面提到的一些提示:
进一步阅读