zsh 완성:complete_values, 대소문자를 구분하지 않음

zsh 완성:complete_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

하지만 나는 작업이 대소 문자를 구분하지 않고 수행되기를 원합니다. 지금 ad이후에 입력하면 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:descword[desc]

이제 대소문자를 구분하지 않고 예상대로 완료됩니다.

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

관련 정보