使用vim进行编程时,是否可以具有vim自动完成的函数名称,变量等?


56

许多IDE会根据用户类型自动完成函数名称,变量,方法名称等。最好的名称会根据语言的内置库以及同一程序的其他文件中已定义的名称来完成名称。

例如,当我输入以下Python程序时:

hungy = True

def eatFood(food):
    pass

if hungry:
    eatF

该行将eatF自动显示eatFood()为可用的自动完成选项。

Vim有此功能吗?如果是这样,我如何启用它?

Answers:


42

vim中有许多不同的自动完成功能。一种方法是使用SuperTab。这提供了一种随时随地或多或少地使用制表符完成的方法。这将使您Tab在部分键入单词以获取完成列表之后点击。例如,键入eatF后跟Tab以展开为eatFood.

请注意:这些图片都链接到实际的gif示例。

超级表完成

Vim具有出色的其他选择。您应该阅读:h ins-completion以了解各种内置完成选项。使用vim的Ctrl- - XCtrlO结合蟒感知插件像绝地武士可以给一个完成的味道。绝地可以配置给文档上全方位完成(这是什么Ctrl- XCtrl- O一样)。然后,完成候选人的文档将显示在拆分窗口中。

ctrlxctrlo完成

使用类似的插件,但使用不同的选项会导致各种行为。例如,有可能不需要提示自动补全(如果您要这样做的话)。相反,在您键入单词的一定数量的字母(例如2或3)之后,插件可以尝试在菜单中智能地提供可能的补全。

在此处输入图片说明

因此,简短的答案是肯定的!但是配置过程可能会有些复杂。我认为这是掌握vim漫长阶梯中的一步。


我已经尝试了所有这些,而且我总是回到SuperTab,这是最不麻烦的。
craigp

1
我也非常喜欢YouCompleteMe插件,因为它会提示您键入,您可以选择或忽略建议。是的,在视觉上很难忽略,但是它在我的工作流程中非常不打扰,因为它需要更少的按键。
第十五届2015年

3
我已将动画更改为“单击”,因为它们已链接到gif动​​画。
davidlowryduda

1
我无法在我的工作计算机上使用YouCompleteMe,因为我没有root来安装依赖项,SuperTab是到目前为止的次佳选择。
查尔斯·克莱顿

@mixedmath在我看来,superTab不起作用。
alhelal '18

24

默认情况下,应启用以下功能-即在当前文件(和所有打开的文件)中搜索自动完成功能Ctrl+P

使用自动补全的屏幕截图

你可以去ñ与EXT建议Ctrl+N,在p与revious建议,Ctrl+P并通过输入任何字母(将建议之后附加)选择它。


1
致编辑(Jasper):我很可能想再次写一些我最近写的东西,而不是将来写的东西,或者是在文件开头的东西。因此^P恕我直言是更自然的。否则,感谢您的编辑(我希望我单击了右键,您获得了+2)。
2015年

1
是的,我得到了那些虚构的互联网观点:)我一直认为建议列表将按字母顺序排序...
Jasper

@Jasper的出现顺序是这样的(至少对我来说是肯定的,也请参见上文:world,word,wood而不是相反)。所以^P是最后一次使用完毕,这是非常方便的(我很少走得更远比列表中的3项,甚至在很长的文件)。
2015年

提示:inoremap <C-Space> <C-N>
wchargin

20

Vim本地支持完成。您可以在中阅读有关Vim支持的各种不同补全的信息:h ins-completion

总的来说,就我所发现的所有目的而言,ins-completions足以满足我的喜好,但是有些完成插件可以为ins-completions提供更多的价值。NeoCompleteYCM(YouCompleteMe)都是相同的。从某种意义上说,它们是更高级的,因为它们尝试更准确地组合不同类型的完成,并且它们还具有高级的缓存机制,因此它们往往会更快。YCM甚至可以与外部编译器/实用程序一起使用,以提供更好的IntelliSense。


9

是的,存在vim的自动完成脚本。“最佳”选择取决于您的编程语言。由于您的示例代码是Python,因此建议您看一下Jedi。在此基础上,您可以完成我的存在,它也支持其他语言,但有时看起来太大了。对于其他语言,您可以浏览关于vim脚本的详细信息


7

在插入模式下,键入单词的前两个字符,然后按:

Ctrl-N to insert the next matching word; or
Ctrl-P to insert the previous matching word. 

在程序中输入变量名称时,这特别有用。

“完成”选项控制搜索关键字的位置(包括文件,标记文件,缓冲区等)。

“ completeopt”选项控制完成的方式(例如,是否显示菜单)。

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.