如何配置 zsh 以完成部分单词,但不区分大小写?

How do I configure zsh for completion of partial words, but case-insensitive?

目前我的 ~/.zshrc:

中有这个
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'

AFAIU 'm:{a-z}={A-Za-z}' 意味着我将获得不区分大小写的制表符完成,例如foo 将制表符完成为 Foobar(如果存在)。 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 意味着我将匹配单词的后面部分,例如bar 将制表符补全为 foobar(如果存在)。但是那些部分匹配不是不区分大小写的。因此,例如 bar 不会制表符完成到 FooBar(同样,如果存在的话)。

有没有办法让它工作?

默认情况下,matcher-list 中的匹配器一次 一个, 直到其中一个 returns 至少匹配一次。默认情况下,每个匹配器都会完全替换前一个。要改为制作匹配器 cumulative(即保留先前的匹配器 并向其添加 ),您需要在其前面加上前缀 +:

zstyle ':completion:*' matcher-list \
    'm:{[:lower:]}={[:upper:]}' \
    '+r:|[._-]=* r:|=*' \
    '+l:|=*'

更多信息: