작동 하게 되었는데 _arguments "1: :($(/usr/local/bin/aliases-drush.php))" \
정말 훌륭합니다. 한 줄에 하나의 매개변수를 인쇄할 수 있는 PHP 스크립트입니다. 하지만 나머지 매개변수는 로컬 파일일 수 있습니다. 계속 시도했지만 '*:file:_files'
더 이상 매개변수 2, 3 등을 완료하지 않습니다.
답변1
#compdef foo
local ret=1
_arguments \
'1:first:(a b c)' \
'*:files:_files' \
&& ret=0
return $ret
완료되었거나 a
b
테스트 c
중인 파일이 두 개 이상 있습니다. 첫 번째 매개변수 핸들러 변경
'1: :($(print -l a b c))' \
나에게도 효과적입니다. 프로그램이 수행하는 모든 작업의 출력에 공백이 있으면 첫 번째 인수를 완료하는 데 문제가 되지만 후속 파일의 완료는 중단되지 않습니다.
'1: :($(< ~/tmp/opts))' \
그런 다음:
% print -l "a b" c d > ~/tmp/opts
% rm ~/.zcompdump
% exec zsh -l
% foo
a b c d
a
존재합니까 ? 종종 개행에서만 분할하는 것과 같은 것을 볼 수 있으며 b
일반적 a b
으로 조사하기 위해 ZSH에서 제공하는 완성 스크립트가 있습니다.${(f)"$(...)"}
cd $fpath[-1]
하지만 "파일 완성이 작동하지 않습니다"라는 문구를 재현할 수 없습니다. 아마도 완전한 완성 스크립트와 프로그램의 적절한 출력이 있을 것입니다.
rm ~/.zcompdump ; exec zsh -l
완료 캐시를 삭제하고 새 ZSH 인스턴스를 시작하는 명령에 유의하세요 . 덜 침해적인 대안은 특정 명령 이름을 사용하여 특정 제거를 수행하는 것일 수 있습니다.
function zbouncecompdef { unfunction _$1; autoload -U _$1; }