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.