如何配置 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:|=*'
更多信息:
目前我的 ~/.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:|=*'
更多信息: