gitlabリポジトリにチケットを管理するための小さなスクリプトがあります。チケットを入力してTabを押すと、次のことを確認したいと思います。
% ticket
new -- create a new ticket
# -- Number of ticket
-v -- increase verbosity
そのために、私はうまくいきませんでした:
#compdef ticket
#autoload
local -a reply
_regex_words commands "ticket commands" \
'new:create a new ticket' \
'-v:increase verbosity' \
'[1-9][0-9]#:open ticket #'
_regex_arguments _ticket /$'[^\0]##\0'/ "${reply[@]}"
_ticket "$@"
私はそれが私の頭の中の数字を完成できないことを知っています。また、それが出て潜在的に数千の数字をロードしたくない。しかし、数字は完成が可能だという点を参考にしてほしいと思います。
答え1
この機能は、パターンではなく文字通りの単語に対して機能します(単語を短縮できる単一の単語を_regex_words
除く)。したがって、次のように数値を直接処理する*
必要があります。_regex_arguments
#compdef ticket
local -a reply
_regex_words commands "ticket commands" \
'new:create a new ticket' \
'-v:increase verbosity'
_regex_arguments _ticket /$'[^\0]##\0'/ \
\( "${reply[@]}" \
\| $'/[1-9][0-9]#\0/' ': _message -e numbers "open ticket"' \)
_ticket "$@"
これは少し醜いです_message
。これは実装方法の副作用ですが、_alternative
他の場所でもこのスタイルの例があります。たとえば、一般的なオプションが多い場合は、そのオプションを使用するのが-v
最善であり、より複雑な領域_arguments
でのみ使用されます。_regex_arguments
ところで#autoload
タグが重複しています。compinit
最初の行だけを見ると、自動ロード可能としてマークされます#autoload
。#compdef