Como anexar / estender conclusões de zshell?

5

Estou usando o zsh com oh-my-zsh. Infelizmente, oh-my-zsh não usa o arquivo ~/.ssh/config para o auto-preenchimento do nome do host (veja Issue # 1009 , por exemplo).

Isso pode ser facilmente arquivado pelo seguinte código:

[ -r ~/.ssh/config ] && _ssh_config=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p')) || _ssh_config=()
zstyle ':completion:*:hosts' hosts $_ssh_config

No entanto, se eu adicionar os comandos acima ao meu arquivo ~/.zshrc , todas as outras fontes para nomes de host (como ~/.ssh/known_hosts ), que são definidas no arquivo ~/.oh-my-zsh/lib/completion.zsh , serão substituídas.

Como posso acrescentar novas regras de conclusão para ':completion:*:hosts' no meu arquivo ~/.zshrc ?

    
por Martin 17.10.2012 / 19:38

4 respostas

6

Acho que você precisa recuperar os itens existentes e anexar os seus.

zstyle -s ':completion:*:hosts' hosts _ssh_config
[[ -r ~/.ssh/config ]] && _ssh_config+=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p'))
zstyle ':completion:*:hosts' hosts $_ssh_config
    
por 18.10.2012 / 00:42
2

Outra opção é redefinir o comando hosts (por padrão getent hosts ) usando zstyle s. A vantagem é que você pode fazer isso apenas para ssh e torná-lo dinâmico (exceto pelo cache feito pelo sistema de conclusão):

zstyle ':completion::complete:ssh*:*:hosts' command '
  getent hosts; sed -n "s/^Host[=[:blank:]]*/ignored /p" ~/.ssh/config'
    
por 22.10.2015 / 18:26
0

A melhor opção parece ser apenas usar os padrões do zsh.

Veja meu pedido de pull para o oh-my-zsh no link

    
por 17.12.2012 / 17:59
0

Você pode querer substituir o oh-my-zsh pelo muito melhor escrito e mantido link que usa o padrão zsh conclusões e este módulo externo link

    
por 18.12.2012 / 18:25