Obter zsh não para completar usuários

1

Eu tenho um diretório com um único subdiretório chamado src . Eu esperaria ao digitar cd s e acertar TAB para o diretório ser concluído. Em vez disso, zsh tenta concluir todos os usuários no sistema, começando com s :

Completing local directory
src/
Completing user
saeumair  sbrg      scan-nix  schlosse  sdwoods   shutdown   
sis-user  smmsp     snitch    srabhina  sshd      sterpeni  sushid    sync 

Eu estou supondo que a linha culpada no meu .zshrc é:

zstyle ':completion:*:directory-stack' list-colors '=(#b) \
        #([0-9]#)*( *)==95=38;5;12'

O que estou usando para concluir o histórico de cd . Alguma ideia de como posso manter essa funcionalidade sem concluir para usuários?

    
por nbubis 01.01.2017 / 14:38

2 respostas

1

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 $@[@]
}
    
por 02.01.2017 / 01:24
0

A opção cdablevars é responsável por criar diretórios nomeados e, portanto, usuários, um argumento válido para o cd. Se você não usar isso, use unsetopt cdablevars .

Para alterar o que foi concluído para o cd, você pode usar o estilo tag-order . Por exemplo, para tentar apenas diretórios locais primeiro, seria:

    zstyle ':completion:*:cd:*' tag-order local-directories

Um prático atalho de tecla para ver as tags aplicáveis em um determinado contexto é pressionar Ctrl-X h em vez de tab .

    
por 05.01.2017 / 18:35