Os usuários são parâmetros válidos para o comando cd
e, portanto, são oferecidos como conclusão, porque você tem a opção cdable_vars
ativado. Com essa opção, cd foo
pode ser usado em vez de cd ~foo
, o que permite que foo
seja qualquer coisa que possa ser til-expandido , incluindo um nome de usuário ou um nome de diretório definido por hash -d
(mas não as variáveis do shell, apesar do nome da opção).
Não há nenhuma opção no código de conclusão para permitir diretórios nomeados, mas não tentar concluí-los. Você poderia contornar isso com um wrapper para a função de conclusão para cd
.
unset -f _cd
autoload -U _cd
functions[_cd_orig]=_cd
_cd () {
setopt local_options no_cdable_vars
_cd_orig $@[@]
}