Aqui está o que eu acho que pode dar errado.
O arquivo que contém o código de conclusão deve estar em um diretório listado na matriz fpath
. Está bem. Observe que você não deve colocar seus próprios arquivos em /usr/share
; O zsh não se importa, mas o seu arquivo pode ser deletado ou sobrescrito pelo gerenciador de pacotes do seu sistema operacional, e é provável que você esqueça de fazer o backup, copiá-lo para outra máquina, etc. Você deve colocar seus próprios arquivos em /usr/local
se você quiser disponibilizá-los para todos os usuários em seu sistema e sob seu diretório pessoal, se desejar apenas para seu usuário. Você pode adicionar um diretório a fpath
no seu .zshrc
(antes de chamar compinit
), por exemplo,
fpath=(~/lib/zsh $fpath)
A primeira linha do arquivo deve ser #compdef
seguida por um espaço seguido por um ou mais nomes de comando separados por espaços. Verifique se não existem caracteres perdidos, em particular o arquivo deve ter finais de linha unix (LF), e não terminações de linha do Windows (CRLF - o CR perdido pode fazer com que o comando não seja atendido).
A função compinit
cria um arquivo de cache na primeira vez que é executado, para ser mais rápido na próxima vez. Este arquivo é chamado ~/.zcompdump
. Ele contém a associação entre nomes de comando e funções de conclusão (por exemplo, aura _aura
), não o código das funções. Você pode precisar regenerá-lo às vezes. Em particular, se você alterar a linha #compdef
em um arquivo existente, compinit
não relerá o arquivo. Contanto que você não passe -C
para compinit
, ele coletará novos arquivos, mas você deve obter a linha #compdef
logo antes da próxima vez que iniciar o zsh. Caso contrário, exclua o arquivo de cache ( rm ~/.zcompdump
) e inicie o zsh (ou execute mais precisamente compinit
) novamente.