如何使Vim对文件名进行常规的(类似于Bash的)制表符补全?


289

当我在Vim中打开一个新文件并使用制表符补全时,它会补全整个文件名,而不是像Bash那样进行部分匹配。是否有一个选项可以使此文件名选项卡的完成更像Bash?


10
从技术上讲,我很确定“ bash”不会完成任何制表符。这是readline所做的。
Maxy-B 2012年

2
我们在谈论自定义^ X ^ F功能的行为吗?
BrunoJCM 2015年

Answers:


413

我个人使用

set wildmode=longest,list,full
set wildmenu

当您键入第一个选项卡命中时,它将尽可能完成。第二个选项卡命中将提供一个列表。第三个及随后的选项卡将在完成选项中循环显示,因此您无需其他键即可完成文件。

像重击一样

set wildmode=longest,list 

但是充实非常方便。


1
我希望这是vim中的默认行为。尽管直到看到这篇文章,我还是无法完全完成制表符。
Neha Karanjkar 2013年

6
@NehaKaranjkar我建议维护一个dotfiles存档,以使其易于在新环境中进行部署
michael

2
只有在结果很少的情况下,才有办法开始完全加载吗?像set wildmode=longest,5full,list。有了很多结果,就没用了,但很少的情况下非常方便。它将是完美的,例如“仅当完成显示在一行屏幕上时才显示完整”
albfan 2014年

1
过去曾经可以使用(gVim / ubuntu),现在却不能使用(macvim8.x / macOS)。参见示例。有任何想法吗?
Paschalis

1
在允许原点标签完成2个月后,我认为必须有一种简化方法。谢谢。
ramwin

23

与Bash完成最接近的行为应该是

set wildmode=longest:full,full

键入几个字符后,按一下选项卡将提供中的所有匹配项wildmenu。这与Michael的答案不同,后者在命令行下方打开了一个类似quickfix的窗口。

然后,您可以继续输入其余字符,或再次按Tab键以自动完成第一个匹配项并在其周围画圈。


我想我更喜欢这种方式。
Eddy Ekofo

8

如果您不想设置Wildmenu,可以在要打开文件时按Ctrl+ LCtrl+ L将完成文件名,如Bash补全。


Ctrl-L不像bash自动完成一样。它不会遍历所有可能的选项。
Raine 2011年

2
我的重击确实像那样。<Tab>尽可能明确地完成当前字符串(如CTRL-L在Vim中)并<Tab><Tab>显示可能的匹配项列表(如CTRL-D在Vim中)。
GLTS

8

除了建议的wildmode / wildmenu,Vim还提供了使用Ctrl+ 显示所有可能完成的选项D。对于像我一样在Vim中搜索不同的自动完成选项时遇到一些问题的某些用户,这可能会有所帮助。


4

我假设您正在通过Ctrl+ 在Vim中使用自动完成功能N来搜索当前缓冲区。使用此命令时,将获得解决方案列表。只需重复该命令即可转到列表中的下一项。所有自动完成命令均是如此。当他们填满整个单词时,您可以继续浏览列表,直到找到想要使用的单词。

这可能是一个更有用的命令:Ctrl+ P。唯一的区别是Ctrl+ P在缓冲区中向后搜索,而Ctrl+在目录中N向前搜索...实际上,它们都将提供具有相同元素的列表,并且它们可能以不同的顺序出现。


0

尝试使用:set wildmenu。除此之外,我不确定您到底在尝试什么。

哦,是的,也许尝试此链接:链接

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.