我开始_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
:通常人们会看到诸如${(f)"$(...)"}
仅在换行符上分割之类的东西,cd $fpath[-1]
通常会有 ZSH 提供的完成脚本来研究。
但我无法重现“文件完成不起作用”的说法;也许有完整的完成脚本和程序的适当输出?
请注意rm ~/.zcompdump ; exec zsh -l
删除完成缓存并启动新 ZSH 实例的命令,侵入性较小的替代方案可能是对特定命令名称进行特定卸载:
function zbouncecompdef { unfunction _$1; autoload -U _$1; }