Se insistirmos em fazer as coisas The Wrong Way ™
#compdef vc
declare -a cheatsheets
cheatsheets=(${(f)"$(ls ~/.cheat/)"})
_arguments '1:cheatsheets:(${cheatsheets})' && return 0
Eca! Isso, é claro, será interrompido se um nome de arquivo contiver uma nova linha, pois (f)
se divide nesses. De qualquer forma, analisar ls
é uma má ideia ; O ZSH pode globar arquivos diretamente em uma matriz:
% mkdir ~/.lojban
% touch ~/.lojban/{go\'i,na\ go\'i}
% words=(~/.lojban/*)
% print -l ${words:t}
go'i
na go'i
% words=(~/.lojban/*(On))
% print -l ${words:t}
na go'i
go'i
%
Mas provavelmente não precisamos de um array local; _files
pode ser concluído em um glob:
#compdef vc
_arguments '1:cheatsheets:_files -g "~/.cheat/*"' && return 0
Isso retorna caminhos de arquivos completos; se apenas o nome de arquivo simples for necessário em um diretório de pesquisa, podemos usar:
#compdef vc
_arguments '1:cheatsheets:_files -W ~/.cheat' && return 0