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,

関連情報