18

在 Zsh 中,我可以使用带有斜杠的文件名完成来定位源代码树深处的文件。例如,如果我输入:

 vim s/w/t/u/f >TAB<

zsh 将模式替换为:

 vim src/wp-contents/themes/us/functions.php

我想要的是能够在 Vim 命令行中以相同的方式定位文件,以便输入

 :vi s/w/t/u/f >TAB<

将自动完成到:

 :vi src/wp-contents/themes/us/functions.php

我正在尝试为 Wildmode 解析 Vim 文档,但我看不出什么设置会给我这个。它对单个文件名进行自动完成,但不是文件路径。Vim 本身支持这个吗?或者如何自定义文件的自动完成算法?

感谢您的任何建议!-mykle-

4

2 回答 2

10

我找不到一个插件来做到这一点,所以我写了一个。它被称为vim-zsh-path-completion。它可以满足您的需求,尽管通过<C-s>而不是<Tab>. 不过,您可以使用它<Tab>来更好地控制匹配的内容。

它有错误,但对于没有空格/特殊字符的基本路径,它应该可以工作。我认为它在当前状态下已经足够有用了。我希望消除错误并清理代码,但我想我现在就开始征求反馈。

谢谢你的主意!

原始(错误)答案,但有一些关于 Vim 的 wildmode 的有用信息。

将以下内容放入您的.vimrc:

set wildmenu
set wildmode=list:longest

这将完成 上最长的唯一匹配<Tab>,包括在适当的情况下附加 a/并下降到目录中。如果有多个匹配项,它将显示您迄今为止输入的匹配项列表。然后您可以键入更多字符并<Tab>再次完成。

我更喜欢下面的设置,它完成到第一个唯一匹配<Tab>,然后如果你再次点击会弹出一个菜单<Tab>,你可以使用箭头键导航并按 Enter 进行选择:

set wildmode=list:longest,list:full

签出:help wildmenu:help wildmode。您可能还想设置wildignore完成时要忽略的模式列表。我有我的:

set wildignore=.git,*.swp,*/tmp/*
于 2013-03-23T05:53:13.100 回答
7

Vim 默认没有这样的功能。最接近的内置功能是 wildmenu/wildmode 组合,但它仍然非常不同。

快速浏览 vim.org 的脚本部分没有返回任何内容,但我并没有看得太远:您应该进一步挖掘。也许它就在那里,某个地方。

您是否尝试过 Command-T、LustyExplorer、FuzzyFinder、CtrlP 或许多类似插件之一?

我使用CtrlP并且可以对文件路径或文件名进行模糊匹配。在文件路径上完成后,我可以使用下面的密钥序列打开src/wp-contents/themes/us/functions.php(假设functions.php是唯一us以 a 开头的文件f):

,f " my custom mapping for the :CtrlP command
swtuf<CR>

编辑

在考虑可能的解决方案时,恐怕我有点短视。我专注于您的确切要求,但 Vim 在打开文件时有很酷的技巧!

:e[dit]命令接受两种类型的通配符:*类似于*您在 shell 中使用的通配符,**表示“任何子目录”。

所以完全有可能做到:

:e s*/w*/t*/u*/f*<Tab>

或类似的东西:

:e **/us/f<Tab>

甚至:

:e **/fun<Tab>

结合 Jim 的回答中的 wildmode 设置,我认为您在这里有一个非常强大的文件导航工具。

于 2013-03-23T07:20:59.433 回答