与Vim中文件名的类似Bash的部分制表符完整功能有关。 > zsh。一旦习惯了,回到ls /u/s/m/m/who.1确实很烦人,特别是当整个部分路径只能解析为一条实际路径,但是每个单独的组件可能有多个补全时。例如在使用ls /usr/share/man/man1/who.1.gz/u<tab>/s<tab>/m<tab>/m<tab>...时,可以在Vim中实现吗?

zsh中还有其他与路径有关的有用功能,例如使用:e移到等效路径,并用:cd替换为cd foo bar(即foo变为bar)。如果有一个解决方案也可以引入这些问题(基本上将与shell相关的任务移交给可以很好地完成这些任务的shell),那将是很好的。

评论

我不知道有什么能完全满足您的要求,但是有各种模糊文件查找器可以让您以类似的方式打开文件。我偏爱CtrlP,但也有Command-T,而且我敢肯定还有其他我忘了它的名字。

@Rich只要我不必将Tab混搭一遍,我都会很高兴。

关于SO已经存在类似的问题。

#1 楼

在我真正发现vim的强大功能之前,我曾经大量使用CtrlP和其他相关插件。让我解释一些不需要外部插件的方法:



自动为您设置:e。这比您发布的内容短和简单得多,但是更好的方法是执行:e /u*/s*/m*/m*/<Tab>,这样它将在:e /usr/share/man/man下递归查找并列出所有匹配的路径,尽管这取决于集合的大小,这可能会花费一些时间,但是在一个项目中,这行之有效,是因为您可以执行:e /usr/**/man<Tab>之类的操作,它将完成所有不完整的路径,并为您提供匹配路径的列表,而且效果非常好。这真的很强大,因为它默认情况下接受部分内容,因此您可以执行/usr之类的操作,如果文件名已经加载到缓冲区列表中,它将完成文件名。这非常好,因为它几乎是即时且非常快。另外,在tpope / vim-obsession和dhruvasagar / vim-prosession的帮助下,我大量使用vim会话,这使我打开的所有文件都保存在缓冲区列表中,即使我存在vim并从中返回到它们,它们也仍然可用。项目目录。


评论


/ u * / s * / m * / m * / 是我过去处理bash的方式。它远远不能替代zsh。当您打开整个文件系统时,/ usr / ** / man 太慢了,但是对于小型项目而言可能很有用。除非我误解了:b,否则它不是用于打开新文件。

–muru
2015年2月10日在17:47



@muru你是对的,它不能替代zsh,但它比必须自己键入整个内容还要好,它的目的是使它变得更容易,**确实确实很慢,但对于常规项目却很有用。 :b用于现有的打开缓冲区,这就是使用会话有帮助的原因。

–德鲁瓦·萨加尔(Dhruva Sagar)
2015年2月10日17:56

#2 楼

vim-zsh-path-completion旨在完全按照您的要求(至少是第一部分)进行操作,但我从未尝试过。 (直到romainl链接到其作者的SO答案之前,我什至没有听说过它,尽管它的文档中也提到了一些局限性。

我最喜欢的插件是CtrlP。用于打开文件时,它会搜索所有完整路径包含以正确顺序键入的字符的文件-您可以不必像示例中那样键入路径的每个组件(以及所有路径分隔符)的一部分,但是如果您这样做的话,它的效果很好,它还使用相同的界面来打开最近使用的文件默认情况下,它将在正常模式下映射<c-p>以打开CtrlP提示符,该提示符显示文件列表,当您键入字符时会缩小范围。随时按Enter打开当前选定的文件,或使用<c-k><c-j>移动

另一个流行的替代方法是Command-T,但我赞成CtrlP,因为它是在VimScript中实现的; Command-T具有Ruby组件。