zsh 补全:完整_values,但不区分大小写

zsh 补全:完整_values,但不区分大小写

我有以下完成脚本来完成角色列表:

host /usr/share/zsh/vendor-completions # cat _foo
#compdef foo

local -a values=('ROLE_ADMIN[Admin]' 'ROLE_USER[User]')

_values -s , 'roles' $values

到目前为止效果很好;它将完成以下角色:

host ~ # foo ROLE_<TAB>
roles
ROLE_ADMIN  -- Admin
ROLE_USER   -- User

但我希望完成工作时不区分大小写,即。如果我现在键入adafter ROLE_,我希望它完成ROLE_ADMIN,但这是行不通的。

我发现我需要使用compadd -M像 这样的匹配规范'm:{[:lower:]}={[:upper:]}',但我不知道如何将其传递给_values似乎不支持的-M

答案1

_values确实无法做到这一点,但是通过替换_values_sequence _describe手动获取值完成可以轻松规避该问题,并且_describe确实支持该-M选项:

host /usr/share/zsh/vendor-completions # cat _foo2
#compdef foo2

local -a values=('ROLE_ADMIN:Admin' 'ROLE_USER:User')

_sequence _describe 'roles' values -M 'm:{[:lower:]}={[:upper:]}'

请注意,这_describe需要以稍微不同的格式进行描述 -word:desc而不是word[desc].

现在它将按预期完成,不区分大小写:

host ~ # foo2 ROLE_ad<TAB>
host ~ # foo2 ROLE_ADMIN,

相关内容