문자 목록을 완성하기 위해 다음과 같은 완성 스크립트가 있습니다.
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:desc
word[desc]
이제 대소문자를 구분하지 않고 예상대로 완료됩니다.
host ~ # foo2 ROLE_ad<TAB>
host ~ # foo2 ROLE_ADMIN,