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

So8*_*res 5 zsh autocomplete

我刚刚开始在 vim 中使用 Command-T 插件,它非常棒。如果您还没有听说过它,它允许您输入以下内容:

Sb
Run Code Online (Sandbox Code Playgroud)

从列表中选择Something.hs-boot

src/project/Control/Whatever/Foobs.hs
src/project/Control/Whatever/Something.hs-boot
src/project/Control/Whatever/Something.hs
Run Code Online (Sandbox Code Playgroud)

等等。

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

s/p/c/w/Sb<tab>
Run Code Online (Sandbox Code Playgroud)

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

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

有人知道怎么设置吗?

Ora*_*ain 1

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

autoload -U compinit && compinit
zmodload zsh/complist
Run Code Online (Sandbox Code Playgroud)

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

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}'
Run Code Online (Sandbox Code Playgroud)

更新1:

我不知道你是否可以执行 Command-T 风格的自动完成...但是由于 zsh 必须在显示某些内容之前获取所有匹配项,因此可以动态执行此操作,尤其是在有很多子目录/文件的地方,可能不可行。

但是您可以使用:

**/*thing <Tab>
Run Code Online (Sandbox Code Playgroud)

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

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

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