仅当我输入大写字母时,zsh 自动完成才使用区分大小写的匹配项

Have zsh autocompletion use case-sensitive matches only if I typed uppercase

如何让 zsh 自动完成在我键入小写字母时给我不区分大小写的匹配项,而在我键入大写字母时给我区分大小写的匹配项?例如,如果我键入“HOtab”,它应该提供 HOMEHOST,但如果我键入“hotab" 它应该提供 HOMEHOSThosthostinfohostname

不区分大小写的部分很简单 (matcher-list m:{a-zA-Z}={A-Za-z}),我找到了 Have zsh return case-insensitive auto-complete matches, but prefer exact matches,但这并不是我想要的 — 如果有任何完全匹配的小写字母,它不会提供大写的。我怀疑答案与左锚匹配器有关,但我无法让它工作。

我最初的想法是,如果键入的字符串包含任何大写字符,则应该完全匹配。我仍然不知道该怎么做。然而,稍微放松的形式对我的目的来说就足够了:

  1. 小写字符应与大小写字符匹配。
  2. 大写字符只能匹配它们自己。

这样的框架,答案很明显:删除我现有的完整 case-insensitive matcher-list 样式 (m:{a-zA-Z}={A-Za-z}) 并替换为:

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