단일 형식 매개변수를 사용하여 명령에 대해 zsh 완성을 설정하고 싶습니다 scheme:parameter
.
가능한 모든 시나리오와 가능한 모든 인수를 반환하는 명령이 있다고 가정해 보겠습니다. 콜론이 입력될 때까지 구성표 목록에서 완료되고 인수 목록에서 완료되는 완료 함수는 무엇입니까?
단일 목록에서는 쉽게 수행할 수 있습니다. 예를 들면 다음과 같습니다.
function _prmt() { _alternative 'args:args:($(prmt --completions))' }
하지만 구분 기호를 인식하는 방법을 모르겠습니다.
답변1
:
한 가지 접근 방식은 다음에 따라 다양한 동작을 찾아 표시하는 것입니다.
#compdef foo
# put this file into a $fpath directory (typically one you create
# and prefix to that array) then `rm ~/.zcompdump && exec zsh`
# until work-making (a temporary `print -z "foo "` in your .zshrc
# may also speed debugging, as then you can go directly to the
# mashing-of-tab stage)
local curcontext="$curcontext" state line
local suf
typeset -A opt_args
_arguments -C -s \
'1: :->dofoo' \
&& return 0
case "$state" in
dofoo)
if compset -P '*[:]'; then
_values "parameters" $(_call_program getparam ls /)
else
if compset -S '[:]*'; then
suf=()
else
suf=( -qS ':' )
fi
_wanted "schemes" expl "scheme" compadd $suf[@] $(_call_program getscheme ls /)
fi
;;
esac
비트 ls /
는 적절한 명령이어야 하며, 이러한 프로그램이 내보내는 내용 등에 따라 출력을 목록으로 적절하게 분할하는 데 필요한 추가 복잡성이 있을 수 있습니다.
배운 방법: 주로 cd $fpath[-1]
완료 처리가 있는 및 완료 섹션을 살펴봅니다._chown
_users
:
추가 정보.