适用于 zsh 的 XCode Command-T 样式自动完成

适用于 zsh 的 XCode Command-T 样式自动完成

我刚刚开始使用 vim 的 Command-T 插件,它很棒。如果你还没听说过它,它允许你输入如下内容:

Sb

从列表中选择 Something.hs-boot

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs

等等。

我想知道我是否可以使用类似的自动完成样式来处理 zsh。我知道 shell 的完成不可能像 vim 的完成那样广泛,因为 shell 的完成可能不应该在你每次输入字母时搜索整个系统,但有没有类似的完成方式,至少我可以输入

s/p/c/w/Sb<tab>

并获得与上面类似的效果?

我听说 zsh 具有相当好的可编程自动完成功能,但我的 shell-fu 相当弱。

有人知道如何设置吗?

答案1

要完成部分路径,只需初始化完成系统就足够了(至少在我的系统上,使用zsh v4.3.17):

autoload -U compinit && compinit
zmodload zsh/complist

如果你想要更花哨一点,你可以让匹配不区分大小写:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'

更新 1:

我不知道你是否可以实现 Command-T 风格的自动完成功能……但由于 zsh 必须全部在显示某些内容之前进行匹配,动态执行此操作(尤其是在具有大量子目录/文件的地方)可能不可行。

但是你可以使用:

**/*thing <Tab>

匹配**当前目录的所有文件和子目录。

主意: 如果它不必是最新的文件列表,您可以编写一个使用输出locate(即预先计算的文件列表)的完成函数

更新 2: https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh

答案2

另一个有趣的选择是使用类似胎儿发育不全症

相关内容