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

Posted

技术标签:

【中文标题】如何让 Vim 对文件名进行正常的(类似 Bash 的)制表符补全?【英文标题】:How do I make Vim do normal (Bash-like) tab completion for file names? 【发布时间】:2010-10-06 07:49:44 【问题描述】:

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

【问题讨论】:

从技术上讲,我很确定“bash”不会完成任何制表符。这是 readline 做的。 我们正在讨论自定义^X^F 功能的行为? 【参考方案1】:

我个人使用

set wildmode=longest,list,full
set wildmenu

当您键入第一个标签点击时,它将尽可能完成。第二个标签点击将提供一个列表。第三个和后续选项卡将循环显示完成选项,因此您无需其他键即可完成文件。

类似 Bash 的只是

set wildmode=longest,list 

但完整的很方便。

【讨论】:

我希望这是 vim 中的默认行为。我虽然在看到这篇文章之前无法完成完整的选项卡。 @NehaKaranjkar 我建议维护一个 dotfiles 存档,以便在新环境中轻松部署 有没有办法只有在结果很少的时候才开始完整?类似set wildmode=longest,5full,list。大量结果完全是无用的,但很少有非常方便。像“仅当完成适合一行屏幕时才显示完整”之类的东西将是完美的 这在过去 (gVim/ubuntu) 曾经可以工作,但现在不行了 (macvim8.x/macOS)。见example。有什么想法吗? 在容忍origin tab完成2个月后,我想一定有办法简化它。谢谢。【参考方案2】:

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

set wildmode=longest:full,full

输入几个字符后,按一次 Tab 将给出 wildmenu 中可用的所有匹配项。这与Michael 的答案不同,后者在命令行下方打开了一个类似快速修复的窗口。

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

【讨论】:

我想我更喜欢这种方式。 一样!通过这种方式,如果您想查看完整列表,仍然可以按 【参考方案3】:

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

【讨论】:

【参考方案4】:

如果你不想设置wildmenu,你可以在要打开文件时随时按Ctrl + LCtrl + L 将像 Bash 完成一样完成文件名。

【讨论】:

Ctrl-L 不像 bash 自动完成。它不会循环遍历所有可能的选项。 我的 bash 确实 就是这样。 <Tab> 尽可能明确地完成当前字符串(如 Vim 中的 CTRL-L),<Tab><Tab> 显示可能匹配的列表(如 Vim 中的 CTRL-D)。【参考方案5】:

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

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

【讨论】:

【参考方案6】:

set wildmode=longest:full 为您提供类似于 Bash 的补全:

单行建议 制表符只完成确定的内容 右/Ctrl-n |向左/Ctrl-p 选择建议。

来自帮助:

If you prefer the <Left> and <Right> keys to move the cursor instead
of selecting a different match, use this:
      :cnoremap <Left> <Space><BS><Left>
      :cnoremap <Right> <Space><BS><Right>

【讨论】:

【参考方案7】:

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

哦,是的,也许可以试试这个链接:link

【讨论】:

以上是关于如何让 Vim 对文件名进行正常的(类似 Bash 的)制表符补全?的主要内容,如果未能解决你的问题,请参考以下文章

如何让linux的history命令显示时间记录

如何让shell脚本变成可执行文件

使用awk / grep / sed / bash / vim进行正则表达式匹配和打印

我如何知道 Bash 脚本中的脚本文件名?

vim编辑器未正常关闭时解决方案

如何让shell脚本变成可执行文件