zsh: altere as regras de conclusão e recompile o arquivo .zwc

3

Em zsh , ssh e scp usam a conclusão do host de /etc/hosts . No entanto, eles tentam corresponder nomes de host mesmo se eu usar letras maiúsculas e quando estou obviamente me referindo a um arquivo, não a um host:

$ scp -rp F<tab>
FOO.txt foo.mydomain.com

Gostaria de desativar esse recurso. Eu mudei a linha seguinte em /usr/share/zsh/functions/Completion/Unix/_ssh

compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts

para

compadd  "$@" $config_hosts

Agora, quando eu começo a digitar meu comando ssh e preencho automaticamente o nome do host usando a guia ssh foo<tab> , recebo um erro:

_all_labels:39: command not found: -J

o que isso significa e como posso corrigi-lo?

Um segundo problema é que não consigo recompilar o arquivo de conclusão depois de fazer as alterações no Unix / _ssh:

zcompile Unix/ Unix.zwc
zcompile: can't open file: Unix.zwc

isto é o que eu recebo quando pressiono Ctrl + X + ? :

$ scp -rp TE
Trace output left in /tmp/zsh10048scp3 (up-history to view)
TESTING.txt
testing          testing.mydomain.com

em que TESTING.txt é um arquivo e testing e testing.mydomain.com são nomes de host

UPDATE:

Percebi que recebi o erro _all_labels:39 acima apenas para hosts, que têm ProxyCommand em ~/.ssh/config , ou seja:

Host testing        testing.mydomain.com
    Hostname        testing.mydomain.com
    User            root    
    PubkeyAuthentication    yes
    StrictHostKeyChecking   yes
    UserKnownHostsFile  ~/.ssh/known_hosts
    ProxyCommand        ssh server2.mydomain.com nc %h %p
    
por 400 the Cat 15.10.2016 / 23:22

1 resposta

2

Por favor, certifique-se de que você não removeu "\" na linha anterior de / usr / share / zsh / funções / Conclusão / Unix / _ssh

_wanted hosts expl 'remote host name' \
 compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' "$@" $config_hosts

Eu fiz isso (removi o caractere de continuação "\" na linha desejada ) e obtive exatamente o mesmo erro que você:

_all_labels:39: command not found: -J

Outra possibilidade é que você pode colocar alguns espaços em branco extras após "\" acidentalmente, desativando-o.

Com relação à segunda parte da sua pergunta, acredito que a sintaxe correta a ser usada é:

zcompile Unix.zwc Unix/*

(compile tudo no Unix / para o Unix.zwc)

    
por 29.10.2016 / 20:55