Acredito que você está editando uma linha errada.
AFAIK config_hosts em Unix / _ssh refere-se às entradas do host em seu ~. / ssh / config , não / etc / hosts .
As regras de conclusão para / etc / hosts são definidas um pouco antes, no seguinte bloco:
# If users-hosts matches, we shouldn't complete anything else.
if [[ "$IPREFIX" == *@ ]]; then
_combination -s '[:@]' my-accounts users-hosts "users=${IPREFIX/@}" hosts "$@" && return
else
_combination -s '[:@]' my-accounts users-hosts \
${opt_args[-l]:+"users=${opt_args[-l]:q}"} hosts "$@" && return
fi
mas isso, por sua vez, apenas reutiliza o estilo hosts definido em Unix / _hosts
Então, se você editar a definição compadd no final do arquivo Unix / _hosts desta forma:
#_wanted hosts expl host \
# compadd -M 'm:{a-zA-Z}={A-Za-z} r:|.=* r:|=*' -a "$@" - _hosts
_wanted hosts expl host \
compadd -a "$@" - _hosts
você deve obter o comportamento desejado.
P.S.
Por favor, note que a edição de arquivos de conclusão de todo o sistema geralmente não é uma prática muito boa, então você pode querer apenas redefinir hosts em sua configuração local do ZSH, por exemplo. adicionando uma função como essa ao seu ~. / zsh:
_hosts() { compadd $(getent hosts | tr -s ' ' '\t' | cut -f2) }