zsh recusando-se a aceitar novo script de preenchimento automático

3

Eu tenho um projeto de software que estou tentando escrever zsh completions para. Depois de instalar um pacote que forneceu uma série de conclusões pré-feitas, descobri que elas foram colocadas aqui:

/usr/share/zsh/site-functions

Então eu escrevi meu script de conclusão e o joguei lá também. ... e foi frustrado pelo fracasso. Eu tentei o seguinte:

  1. Symlinking para o script original no diretório acima.
  2. Colocando uma cópia do script diretamente no diretório acima.
  3. Definindo meu shell de login como zsh (em vez de apenas mudar para outro shell)
  4. (provavelmente) todas as permutações de compinit e rehash .
  5. Enfraquecendo meu roteiro original para que não haja como isso possa estar errado.
  6. Alterando o conteúdo de outro script. As mudanças funcionaram, portanto, o diretório está correto e o zsh está detectando scripts de conclusão lá.

Aqui está o script simplificado:

#compdef aura

_arguments -s \
  '-V[Version!]' \
  '-h[Helpppp]'

E o conteúdo atual do meu .zshrc. Eu não sou normalmente um usuário zsh.

autoload -U compinit
compinit
zstyle ':completion:*' rehash true

Por favor e obrigado por qualquer insight que você possa dar. O que estou perdendo?

EDIT: O conteúdo de / usr / share / zsh / site-functions é:

_ack _adb _android _attach _aura _baselayout _bpython _brew _bundle _cap _choc _coffee _cower _cpanm _debuild _dhcpcd _ditz _emulator _eselect _fab _gas _gcc-config _geany _gem _genlop _gentoolkit _gentoo_packages _git-flow _github _git-pulls _git-wtf _google _gradle _heroku _jmeter _jmeter-plugins _jonas _knife _language_codes _layman _lein _lunar _lunchy _manage.py _mosh _mvn _node _optirun _pacman _pactree _pear _perf _periscope _pgsql_utils _pip _pkcon _play _port _portage _portage_utils _pygmentize _redis-cli _rvm _sbt _scala _sdd _setup.py _showoff _smartmontools _srm _ssh-copy-id _subliminal _symfony _systemd _teamocil _thor _tmuxinator _vagrant _virtualbox _vnstat _vpnc _yaourt

    
por Colin Woodbury 29.12.2012 / 03:45

1 resposta

1

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.

    
por 30.12.2012 / 00:59