남은_매개변수에 대한 파일 완성을 허용하려면 어떻게 해야 합니까?

남은_매개변수에 대한 파일 완성을 허용하려면 어떻게 해야 합니까?

작동 하게 되었는데 _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; }

관련 정보