仅当我输入大写字母时,zsh 自动完成才使用区分大小写的匹配项
Have zsh autocompletion use case-sensitive matches only if I typed uppercase
如何让 zsh 自动完成在我键入小写字母时给我不区分大小写的匹配项,而在我键入大写字母时给我区分大小写的匹配项?例如,如果我键入“HOtab”,它应该提供 HOME
和 HOST
,但如果我键入“hotab" 它应该提供 HOME
、HOST
、host
、hostinfo
和 hostname
。
不区分大小写的部分很简单 (matcher-list m:{a-zA-Z}={A-Za-z}
),我找到了 Have zsh return case-insensitive auto-complete matches, but prefer exact matches,但这并不是我想要的 — 如果有任何完全匹配的小写字母,它不会提供大写的。我怀疑答案与左锚匹配器有关,但我无法让它工作。
我最初的想法是,如果键入的字符串包含任何大写字符,则应该完全匹配。我仍然不知道该怎么做。然而,稍微放松的形式对我的目的来说就足够了:
- 小写字符应与大小写字符匹配。
- 大写字符只能匹配它们自己。
这样的框架,答案很明显:删除我现有的完整 case-insensitive matcher-list
样式 (m:{a-zA-Z}={A-Za-z}
) 并替换为:
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
如何让 zsh 自动完成在我键入小写字母时给我不区分大小写的匹配项,而在我键入大写字母时给我区分大小写的匹配项?例如,如果我键入“HOtab”,它应该提供 HOME
和 HOST
,但如果我键入“hotab" 它应该提供 HOME
、HOST
、host
、hostinfo
和 hostname
。
不区分大小写的部分很简单 (matcher-list m:{a-zA-Z}={A-Za-z}
),我找到了 Have zsh return case-insensitive auto-complete matches, but prefer exact matches,但这并不是我想要的 — 如果有任何完全匹配的小写字母,它不会提供大写的。我怀疑答案与左锚匹配器有关,但我无法让它工作。
我最初的想法是,如果键入的字符串包含任何大写字符,则应该完全匹配。我仍然不知道该怎么做。然而,稍微放松的形式对我的目的来说就足够了:
- 小写字符应与大小写字符匹配。
- 大写字符只能匹配它们自己。
这样的框架,答案很明显:删除我现有的完整 case-insensitive matcher-list
样式 (m:{a-zA-Z}={A-Za-z}
) 并替换为:
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'