Vim中的自动补全


258

经过长时间的“培训”,我终于切换到了Vim。但是我在自动补全方面遇到了一些麻烦。键入时如何获得代码建议?

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

Answers:


143

您可以使用诸如AutoComplPop之类的插件在键入时自动完成代码。

2015编辑:我个人现在使用YouCompleteMe


10
强烈建议这样做。无需键入CX CO,CP或CN。
Amjith 2011年

我已经尝试过了,但是似乎不起作用..可能与其他脚本有冲突..
diegocstn 2011年

1
您是否将文件放入〜/ .vim中的指定目录?
michaelmichael 2011年

1
默认情况下,@ dieguitoweb ACP不适用于所有文件类型。您必须对其进行“破解”,才能使其与JavaScript,ActionScript和PHP一起使用。在这里,我解释了我是如何做到的。而这里是PHP另一条线索。
romainl 2011年

现在它可以工作了:)所有文件都已经在正确的目录中了。我只用从git存储库下载的新文件替换了脚本,现在一切正常。非常感谢
diegocstn 2011年

438

在插入模式下,使用Ctrl- N获取单词建议的列表。键入:help i_CTRL-N以查看有关此功能的Vim文档。

是将Python字典导入Vim的示例。


15
谢谢,这很好,但是如何在不按<ctrl + N>的情况下自动显示此列表?
diegocstn 2011年

5
这就是michaelmichael用他提到的插件告诉您的。另外,您可能会看看SuperTab。
projecktzero 2011年

4
对于CSS支持,通​​过在您的.vimrc中添加'set iskeyword + =-'来添加内置自动补全的破折号
mahalie 2012年

3
这是最全面,最原始的方法:-)
Srikant 2014年

5
@ Hi-Angel,“自动”部分是它自动确定单词补全的选项,并在选择选项时自动竞争该单词。
CJBS


11

您可以从内置omnifunc设置开始。

只需输入:

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意思 谢谢。
2013年

好的,我明白了,它意味着setlocal。但是为什么我们在这里需要setlocal?
2013年

看看在同一缓冲区中打开另一个文件时它如何使您烦恼。
ernix

2
@ernix从您的链接:Vim中的缓冲区是...文件的打开实例...我知道缓冲区,窗口和标签页;但我不知道要在同一缓冲区中打开另一个文件。在我看来,当您打开文件时,它将始终在新缓冲区中打开并将该缓冲区添加到缓冲区列表中。我知道还有其他使用缓冲区的方式,例如快速修复列表,但是我不知道更改缓冲区中的文件。:h buffers说:缓冲区是加载到内存中进行编辑的文件。也就是说,我只在认真使用Vim了3个月。并且肯定会接受纠正。
JakeD '18年

1
@JakeD啊,是的。你是对的。我认为“实例”的意思是错误的。我误会了您在谈论具有不同PID的进程。抱歉,忘了我说的话。
ernix


6

我最近发现了一个名为OniVim的项目,它是NeoVim的基于电子的前端,具有开箱即用的多种语言的出色自动完成功能,并且由于它基本上只是NeoVim的包装,因此您拥有vim的全部功能如果GUI无法满足您的需求,请随时使用。它仍处于早期开发中,但正在迅速改善,周围有一个非常活跃的社区。我使用vim已有10多年了,并在几周前开始对Oni进行测试,尽管它确实存在一些错误,但并没有妨碍我。我强烈推荐给仍在使用vim-finger的新vim用户!

在此处输入图片说明

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


32
对我来说,vim的整个方面都在使用终端...如果我想使用电子应用程序,我将只使用带有vim扩展名的
vscode

2
@MohamedBenkedadra但这真的会让您获得Vim的全部功能吗?一方面,我恰好是其搜索和替换模式系统的忠实拥护者,如果vim仿真插件支持该功能,我会感到惊喜。
SilverWolf-恢复莫妮卡

3

我已经使用neocomplcache大约半年了。它是一个插件,可收集所有缓冲区中的单词缓存,然后提供它们供您自动完成。

前一个链接在项目页面上有一系列屏幕截图。Neocomplcache还具有大量的配置选项,其中在项目页面上也有一些基本示例。

如果需要更深入的知识,可以查看vimrc中的相关部分-只需搜索单词neocomplcache。


1

这里是链接!对于PHP。

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

感谢Oseems Solutions提供的教程


1

如果从当前的缓冲区高速缓存,你只希望自动完成,SUPERTAB更容易安装比neocomplete,可以在Mac上运行预装的vim在箱子外面,而不需要的MacVim的。

您可以在vim awesome上查看其他替代方法。


0

对于PHP,带有Deoplete的Padawan是Neovim中具有强大的PHP自动完成功能的绝佳解决方案。我尝试了很多事情,Padawan的魅力十足!

对于Vim,可以使用Neocomplete代替Deoplete。

如果有人感兴趣,我写了一篇文章如何制作Vim PHP IDE。当然,Padawan是其中的一部分。


0

另一个选项是coc.nvim

它使用VScode具有的自动感知功能,因此速度非常快,而且完成效果非常好。它还具有起绒功能。因此,它表明您可能有错误。它支持多种语言。

设置和配置可能会花费一些时间,但我觉得这是vim最好的自动完成引擎。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.