Na primeira vez, o Sistema de Conclusão do zsh parece ser muito complexo e difícil de entender . Vamos tentar um exemplo.
A primeira coisa que você precisa saber é que zsh
completion system carregará as funções de conclusão de $fpath
. Verifique se o seu diretório de conclusões aparece em:
print -rl -- $fpath
(Se você usou oh-my-zsh , existe .oh-my-zsh/completions
em $fpath
, você pode apenas criá-lo e colocar suas funções de conclusão lá)
Agora, você deve criar um arquivo de conclusão para sua função, seu nome deve começar com sublinhado _
, além do nome da sua função. No seu caso, o nome dele é _eb_instances
.
Adicione essas linhas a _eb_instances
file:
#compdef eb_instances
_eb_instances() {
local state
_arguments \
'1: :->aws_profile'\
'*: :->eb_name'
case $state in
(aws_profile) _arguments '1:profiles:(cuonglm test)' ;;
(*) compadd "$@" prod staging dev
esac
}
_eb_instances "$@"
Você terminou. Salve o arquivo e inicie uma nova sessão para testar a conclusão. Você verá algo assim:
$ eb_instances <cursor>TAB
cuonglm test
$ eb_instances cuonglm <cursor>TAB
dev prod staging
Você pode ler a documentação do sistema de conclusão do zsh sobre a função _arguments
, state
variable. Além disso, você precisa alterar (cuonglm test)
com seu comando sed
e alterar prod staging dev
para sua função eb_names
.
Se você quiser gerar o segundo argumento base no qual o primeiro argumento passou, você pode usar $words[2]
variable:
case $state in
(aws_profile) _arguments '1:profiles:(cuonglm test)' ;;
(*) compadd "$@" $(echo $words[2]) ;;
esac
Substitua echo
pela sua função real, no seu caso, é $(eb_names $words[2])
.
Se ainda assim você achar difícil fazer isso, basta definir _eb_instances
e eb_instances
no seu .zshrc
e, em seguida, concluir a chamada como:
compdef _eb_instances eb_instances
Você precisa inicializar o sistema de conclusão com:
autoload -U compinit
compinit
(Se você usou oh-my-zsh
, ele foi carregado)