乱数を許可するzsh用のオートコンプリート機能を作成するには?

乱数を許可するzsh用のオートコンプリート機能を作成するには?

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

おすすめ記事