zsh autocomplete pastas que não existem

4

Comecei a usar o zsh com oo-meu-zsh e notei algo estranho ao preencher automaticamente com cd .

Suponha que eu tenha uma pasta:

my_folder/
    subfolder/
    another_subfolder/
    file.txt

Quando usei o bash, eu poderia digitar:

$ cd p<tab>

E nada aconteceria porque nada em my_folder começa com p , mas se eu fizer a mesma coisa em zsh, ele será preenchido automaticamente com a palavra proxy , o que eu suponho ser algum diretório em algum outro lugar no sistema de arquivos?

Não tenho certeza se algo está configurado errado ou se isso é algo sobre o modo como o preenchimento automático funciona em zsh que não entendo.

EDITAR:

Saída de CTRL + Xh:

tags in context :completion::complete:cd::
    local-directories named-directories      (_alternative _cd (eval)) 
    users named-directories directory-stack  (_tilde _alternative _cd (eval)) 
    users                                    (_users _tilde _alternative _cd (eval))
    
por seth 08.07.2011 / 04:16

1 resposta

5

Não tenho certeza se você ainda está acompanhando esta pergunta, mas gostaria de ajudar. Já faz algum tempo desde que eu mergulhei nas entranhas do sistema de completação do zsh, então isso será uma boa desculpa.

Por enquanto, usaremos essa resposta como uma ferramenta contínua para fornecer dicas úteis para ajudar você (e eu) a solucionar o problema.

Como você pode ver, o sistema de completação do zsh é muito poderoso. Às vezes, conclui itens que você não deseja concluir. Por exemplo, você quase sempre deseja limitar argumentos ao comando 'cd' para serem diretórios. No entanto, em zsh, esses podem ser diretórios de sistema de arquivos, diretórios nomeados, diretórios em várias variáveis de caminho ou até mesmo diretórios armazenados em variáveis de shell padrão. Então, acho que o primeiro passo é determinar o "contexto" da sua conclusão.

Por favor, digite cd no diretório my_folder acima e digite:

cd p<CTRL-X>h

CTRL-Xh é a combinação de teclas padrão para exibir o contexto atual para conclusão. Por favor, deixe-me saber qual é a saída desta combinação de teclas. Por exemplo, minha saída ficou assim:

tags in context :completion::complete:cd::
    local-directories  (_alternative _cd (eval))

O item chave a ser observado é "diretórios locais". O que NÃO vemos aqui é um item comumente 'diretório de caminho', que se refere aos diretórios que podem ser encontrados em $ cdpath e possivelmente em outros locais. (Não me lembro de improviso.)

Se você vir itens diferentes de 'diretórios locais', isso será uma dica de onde essa entrada 'proxy' pode estar vindo. Por exemplo, aqui estão os tipos de itens que minha configuração zsh tentará concluir se eu tentar concluir a partir do início da linha de comando sem digitar nada:

commands builtins functions aliases suffix-aliases reserved-words jobs parameters  

Você pode, de fato, ver um ou mais desses itens com sua saída CTRL-Xh, ou mesmo itens que eu não listo acima. (Esses são apenas exemplos)

Aqui está uma maneira de você poder ajudar a limitar o zsh a apenas fornecer diretórios locais e diretórios $ cdpath como opções de conclusão:

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

Se você não quiser algum cd mágico moderadamente útil que o zsh ofereça, elimine os 'diretórios de caminho' do final, e acredito que você obterá o comportamento desejado. Você vai querer colocar isso em seu arquivo .zshrc para torná-lo persistente em todas as sessões. Deixe-me saber se isso ajuda.

    
por 14.09.2011 / 04:59

Tags