仅当我键入大写字母时,才使zsh autocompletion使用区分大小写的匹配项

问题描述

如果键入小写字母,如何使zsh自动补全给出不区分大小写的匹配项,但是如果键入大写字母,则如何区分大小写?例如,如果我键入“ HO tab ”,则应提供HOMEHOST,但是如果我键入“ ho tab ”,则应提供HOMEHOSThosthostinfohostname

不区分大小写的部分很容易(matcher-list m:{a-zA-Z}={A-Za-z}),我发现了Have zsh return case-insensitive auto-complete matches,but prefer exact matches,但这不是我想要的-如果存在任何精确的小写字母匹配,它将不提供大写字母匹配。我怀疑答案与左锚定匹配器有关,但我无法使其正常工作。

解决方法

我最初想到的是,如果键入的字符串包含任何大写字符,则应完全匹配。我仍然不知道该怎么做。但是,略微放松的表单足以满足我的需求:

  1. 小写字符应与大写和小写字符匹配。
  2. 大写字母只能匹配。

这样构造,答案很明显:删除我现有的完全不区分大小写的matcher-list样式(m:{a-zA-Z}={A-Za-z})并替换为:

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