如何在Vim中自动完成文件路径,就像在zsh中一样?

Myk*_*sen 17 vim zsh autocomplete

在Zsh中,我可以使用带有斜杠的文件名完成来定位源树中的深层文件.例如,如果我键入:

 vim s/w/t/u/f >TAB<
Run Code Online (Sandbox Code Playgroud)

zsh用以下代码替换模式:

 vim src/wp-contents/themes/us/functions.php
Run Code Online (Sandbox Code Playgroud)

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

 :vi s/w/t/u/f >TAB<
Run Code Online (Sandbox Code Playgroud)

将自动完成:

 :vi src/wp-contents/themes/us/functions.php
Run Code Online (Sandbox Code Playgroud)

我正在尝试解析Vim docs for wildmode,但是我没有看到什么设置会给我这个.它正在为单个文件名进行自动完成,但不对文件路径进行自动完成.Vim原生支持吗?或者我如何自定义文件的自动完成算法?

谢谢你的建议!-mykle-

Jim*_*art 9

我找不到一个插件来做这个,所以我写了一个.它被称为vim-zsh-path-completion.它做你想要的,虽然通过<C-s>而不是<Tab>.但是,您可以使用它<Tab>来更好地控制匹配的内容.

它有bug,但对于没有空格/特殊字符的基本路径,它应该可以工作.我认为它在当前状态下有用是有用的.我希望找出错误并清理代码,但我想我现在就开始征求反馈意见了.

谢谢你的想法!

原始(错误的)答案,但有一些关于Vim野生模式的有用信息.

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

set wildmenu
set wildmode=list:longest
Run Code Online (Sandbox Code Playgroud)

这将完成最长的唯一匹配<Tab>,包括/在适当的位置附加a 和降序到目录.如果有多个匹配项,则会显示到目前为止您输入的匹配项列表.然后您可以输入更多字符并<Tab>再次完成.

我更喜欢以下设置,该设置完成第一次唯一匹配<Tab>,然后如果<Tab>再次点击则弹出一个菜单,您可以使用箭头键导航并按Enter键从以下选项中选择:

set wildmode=list:longest,list:full
Run Code Online (Sandbox Code Playgroud)

退房:help wildmenu并且:help wildmode.您可能还希望wildignore在完成时设置要忽略的模式列表.我有我的:

set wildignore=.git,*.swp,*/tmp/*
Run Code Online (Sandbox Code Playgroud)


rom*_*inl 6

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

快速查看vim.org的脚本部分并没有返回任何内容,但我看起来并不太远:你应该进一步挖掘.也许它就在那里,某处.

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

我使用CtrlP,模糊匹配可以在文件路径或文件名上完成.在文件路径上完成后,我可以使用下面的keysequence打开src/wp-contents/themes/us/functions.php(假设下面functions.php的唯一文件us以a开头f):

,f " my custom mapping for the :CtrlP command
swtuf<CR>
Run Code Online (Sandbox Code Playgroud)

编辑

在考虑可能的解决方案时,我担心我有点近视.我专注于你的确切要求,但Vim在打开文件方面有很酷的技巧!

:e[dit]命令接受两种类型的通配符:*就像*您在shell中使用的那样,**意味着"任何子目录".

所以完全有可能做到:

:e s*/w*/t*/u*/f*<Tab>
Run Code Online (Sandbox Code Playgroud)

或类似的东西:

:e **/us/f<Tab>
Run Code Online (Sandbox Code Playgroud)

甚至:

:e **/fun<Tab>
Run Code Online (Sandbox Code Playgroud)

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