![난수를 허용하는 zsh용 자동 완성 기능을 만드는 방법은 무엇입니까?](https://linux55.com/image/197800/%EB%82%9C%EC%88%98%EB%A5%BC%20%ED%97%88%EC%9A%A9%ED%95%98%EB%8A%94%20zsh%EC%9A%A9%20%EC%9E%90%EB%8F%99%20%EC%99%84%EC%84%B1%20%EA%B8%B0%EB%8A%A5%EC%9D%84%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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