Vim中的自动补全

334

我在自动补全方面遇到了问题。我如何在输入时获得代码建议?

我通常开发PHP、Ruby、HTML、C和CSS。

11个回答

533

当处于插入模式时,使用Ctrl-N可以获得一系列单词建议。输入:help i_CTRL-N查看Vim文档中关于该功能的说明。

这里有一个将Python字典导入到Vim中的示例。


19
谢谢,这很好。但是我怎么才能自动获取这个列表,而不需要按<ctrl+N>键? - diegocstn
6
Michaelmichael提到的插件就是要告诉你这个。此外,你可能还需要看一下SuperTab。 - projecktzero
5
为了支持CSS,请在您的.vimrc文件中添加“set iskeyword+=-”,以便通过添加破折号来进行内置自动完成。 - mahalie
3
这是最全面且最自然的做法 :-) - Srikant
6
"auto"的意思是自动确定单词的选项并在选择一个选项后自动完成单词。 - CJBS
显示剩余4条评论

171
您可以使用像AutoComplPop这样的插件,在您输入时自动获得代码补全功能。
2015编辑:我个人现在使用YouCompleteMe

13
这是强烈建议的。它可以省去敲击“C-X C-O”、“C-P”或“C-N”的麻烦。 - Amjith
我已经尝试过了,但似乎不起作用。可能与其他脚本存在冲突。 - diegocstn
1
你是否将文件放置在~/.vim指定的目录中? - michaelmichael
1
@dieguitoweb ACP默认情况下并不能适用于所有文件类型。你需要“破解”它,使其适用于JavaScript、ActionScript和PHP。这里我解释了如何做到这一点。而这里则是PHP的另一个提示。 - romainl
现在它可以工作了 :) 所有文件已经在正确的目录中了... 我只是用从 Git 存储库下载的新脚本替换了原来的脚本,现在一切都好了。非常感谢。 - diegocstn
显示剩余2条评论

72
如果您使用的是VIM 8或更高版本,只需键入Ctrl + nCtrl + p即可。

2
有没有办法让它们在不按Ctrl + P的情况下弹出?即我希望它能够随着我的输入而继续建议给我。 - Umang Singh
也许这可以帮助你:https://dev59.com/eHRB5IYBdhLWcg3wv5o_ - Ângelo Polotto
"ctrl +n/p" 在早期版本中也可以使用。 - dlmeetei

16
你可以从内置的omnifunc设置开始。
只需输入:

Just put:

filetype plugin on
au FileType php setl ofu=phpcomplete#CompletePHP
au FileType ruby,eruby setl ofu=rubycomplete#Complete
au FileType html,xhtml setl ofu=htmlcomplete#CompleteTags
au FileType c setl ofu=ccomplete#CompleteCpp
au FileType css setl ofu=csscomplete#CompleteCSS
在您的.vimrc底部添加,然后在插入模式下键入<Ctrl-X><Ctrl-O>。 我总是依赖于这个CSS完成。

setl 是什么意思?谢谢。 - qed
好的,我明白了,它的意思是setlocal。但是我们为什么需要在这里使用setlocal呢? - qed
看看当您在同一缓冲区中打开另一个文件时会感到多么烦恼。 - ernix
3
根据您提供的链接,Vim 中的“缓冲区”是一个打开的文件实例。虽然我知道有关缓冲区、窗口和标签页的信息,但不知道如何在同一缓冲区中打开另一个文件。似乎每当打开一个文件时,它都会在一个新缓冲区中打开,并将该缓冲区添加到缓冲区列表中。我知道还有其他缓冲区的用法,例如快速修复列表,但我并不知道如何更改缓冲区中的文件内容。:h buffers 说:“缓冲区是加载到内存中以供编辑的文件。” 话虽如此,我只是认真使用 Vim 三个月,欢迎指正。 - JakeD
1
@JakeD 是的,你说得对。我曲解了“实例”这个词的意思。我误解了你在谈论具有不同PID的进程。抱歉,刚才说的话请忘掉吧。 - ernix
显示剩余2条评论

9

还有一个叫做YouCompleteMe的工具,它包括Jedi等功能,并且还有模糊匹配。到目前为止,我发现YCM是我尝试过的最快的。

编辑:还有一些新的工具,比如completor.vim


6
另一种选择是coc.nvim。 它非常快,因为它使用与 VScode 相同的 Intellisense 自动完成功能,因此自动完成功能很好。 它还具有代码检查功能,可以显示您可能存在错误的位置。 它支持多种语言。 它可能需要一些时间来设置和配置,但我认为它是 vim 中最好的自动完成引擎。

3
我已经使用neocomplcache大约半年了。这是一个插件,它会在所有缓冲区中收集单词的缓存,然后提供给您自动完成。
在先前的链接的项目页面上有一系列的截图。Neocomplcache还有大量的配置选项,在项目页面上也有基本示例。
如果您需要更深入的了解,可以查看我的vimrc中相关的部分-只需搜索单词"neocomplcache"即可。

1
如果你只想要从当前缓冲区的缓存中进行自动完成,supertabneocomplete 更容易安装,可以直接在预安装的 Mac vim 上使用,而无需使用 MacVim。
你可以在 vim awesome 上查看其他替代方案。

1

这里是PHP的链接

当编写一些PHP函数时,按下Ctrl + x,然后按下Ctrl + o键。

感谢Oseems Solutions提供的教程。


0

我最近发现了一个名为OniVim的项目,它是基于Electron的NeoVim前端,内置了多种语言非常好用的自动完成功能。由于它基本上只是NeoVim的包装器,如果GUI不能满足您的需求,您可以充分利用vim的全部功能。虽然它仍处于早期开发阶段,但它正在快速改进,并且周围有一个非常活跃的社区。我已经使用vim超过10年了,几周前开始试用Oni,虽然它偶尔会有一些bug,但并没有妨碍我的使用。我强烈推荐给那些还在适应vim的新用户!

enter image description here

OniVim: https://www.onivim.io/

OniVim:https://www.onivim.io/


61
对我来说,Vim 的重点就是使用终端……如果我想使用基于 Electron 的应用程序,我会直接使用带有 Vim 扩展的 VSCode。 - Mohamed Benkedadra
3
但这真的能让你充分发挥Vim的全部功能吗?就我个人而言,我特别喜欢它的搜索和替换模式系统,如果有一个支持这一功能的vim仿真插件,我会感到非常惊喜。 - SilverWolf
1
vim不需要GUI,但是electron需要,这就是为什么它们不能相比的原因 :) - Andrii Soluk
@SilverWolf,但是 Electron 应用程序能够给你完整的 Vim 功能吗? 它不够轻量级,因此无法通过 SSH 连接运行。 - Dimitri Lesnoff
FYI,OniVim已经停止开发 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接