在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
我试图解析Vim docs for wildmode,但我不知道有什么设置会给我这个。它为单个文件名进行自动完成,但不对文件路径进行自动完成。 Vim原生支持吗?或者我如何自定义文件的自动完成算法?
感谢您的任何建议! -mykle -
答案 0 :(得分:9)
我找不到一个插件来做这个,所以我写了一个。它被称为vim-zsh-path-completion。虽然通过<C-s>
而不是<Tab>
,但它可以满足您的需求。您可以将其与<Tab>
一起使用,以便更好地控制匹配的内容。
它有bug,但是对于没有空格/特殊字符的基本路径,它应该有效。我认为它在当前状态下有用是有用的。我希望找出错误并清理代码,但我想我现在就开始征求反馈。
感谢您的想法!
原始(错误)答案,但有一些关于Vim野外模式的有用信息。
将以下内容放入.vimrc
:
set wildmenu
set wildmode=list:longest
这将完成<Tab>
上最长的唯一匹配,包括附加/
并在适当的位置下降到目录中。如果有多个匹配项,则会显示到目前为止您输入的匹配项列表。然后,您可以再次输入更多字符和<Tab>
来完成。
我更喜欢以下设置,该设置完成<Tab>
上的第一个唯一匹配,然后再次点击<Tab>
时会弹出一个菜单,您可以使用箭头键导航并按Enter键选择:
set wildmode=list:longest,list:full
结帐:help wildmenu
和:help wildmode
。您可能还希望将wildignore
设置为完成时要忽略的模式列表。我有我的:
set wildignore=.git,*.swp,*/tmp/*
答案 1 :(得分:6)
默认情况下,Vim没有这样的功能。最接近的内置功能是wildmenu / wildmode组合,但它仍然非常不同。
A quick look at the script section of vim.org没有返回任何东西,但我看起来并不太远:你应该进一步挖掘。也许它就在那里,某处。
您是否尝试过Command-T,LustyExplorer,FuzzyFinder,CtrlP或众多类似插件之一?
我使用CtrlP,可以在文件路径或文件名上进行模糊匹配。在文件路径上完成后,我可以使用下面的密钥序列打开src/wp-contents/themes/us/functions.php
(假设functions.php
是us
下唯一以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设置,我认为你在这里有一个非常强大的文件导航工具。