gitlab repos에서 티켓을 관리하기 위한 작은 스크립트가 있습니다. 티켓을 입력하고 탭을 누르면 다음을 확인하고 싶습니다.
% 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
자동 로드 가능으로 표시되도록 합니다.