文字リストを完成させるには、次の完成スクリプトがあります。
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,