如何允许其余_参数的文件完成?

如何允许其余_参数的文件完成?

我开始_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 bc对我来说然后至少有两个文件在测试中。更改第一个参数处理程序

  '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:通常人们会看到诸如${(f)"$(...)"}仅在换行符上分割之类的东西,cd $fpath[-1]通常会有 ZSH 提供的完成脚本来研究。

但我无法重现“文件完成不起作用”的说法;也许有完整的完成脚本和程序的适当输出?

请注意rm ~/.zcompdump ; exec zsh -l删除完成缓存并启动新 ZSH 实例的命令,侵入性较小的替代方案可能是对特定命令名称进行特定卸载:

function zbouncecompdef { unfunction _$1; autoload -U _$1; }

相关内容