Por que zsh (oh-my-zsh) está completando diretórios que não existem?

6

UPDATE 3 Eu percebi que essas opções chatas de autopreenchimento são, na verdade, nomes de usuário . Ou seja eles existem em /etc/passwd Eu tenho usuários como _kadmin_admin e _kadmin_changepw e muitos outros começando com um sublinhado. Isso pode ser específico para o OSX.

Oh-my-zsh é auto-preenchido com esses nomes de usuário quando não consegue encontrar outras correspondências. Eu tentei adicionar esses nomes de usuário à lista "Não conclua usuários desinteressantes" em ~/.oh-my-zsh/lib/completion.zsh , mas isso não funcionou. Não sei por quê?

Existe alguma maneira de impedir que o oh-my-zsh atualize automaticamente os nomes de usuário?

Estou ficando frustrado com algum comportamento estranho em ZSH ou oh-my-zsh. Não tenho certeza do que estaria causando isso.

O preenchimento automático parece estar pesquisando alguns diretórios estranhos que eu não quero. Eles parecem ser alguns diretórios SVN, que eu não sei nada e não tenho idéia por que eles estariam no caminho. (Eu nem uso o SVN)

Esse comportamento parece ocorrer somente se não houver outras correspondências no diretório atual - ele deve, então, procurar em algum outro caminho sobre o qual não tenho idéia.

Exemplo:

OBSERVAÇÃO: não há nada em meu diretório inicial que corresponda a mi

→  ~  cd mi<tab>
→  ~  cd _kadmin

Ou seja. Acontece mi em _kadmin . Não tenho ideia do porquê de estar correspondendo a esse diretório.

Se eu tentar realmente mudar para esse diretório, recebo um erro de qualquer maneira (pois não é o nome completo do diretório):

→  ~  cd _kadmin
cd:cd:10: no such file or directory: _kadmin

Se eu continuar pressionando <tab> , ele corresponderá ao nome completo do diretório:

→  ~  cd mi<tab><tab><tab>
→  ~  cd kadmin_admin
→  ~_svn
→  ~_svn pwd
/var/empty

Eu não tenho ideia do que está acontecendo lá. Eu não tenho ideia do que é kadmin_admin. E por que quando eu mudo para ele, por que eu iria agora obter um nome de diretório de ~_svn , e então se eu PWD ele mostra /var/empty

Este é o meu caminho:

/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/gems/ruby-1.9.3-p194@global/bin:/Users/asgeo1/.rvm/rubies/ruby-1.9.3-p194/bin:/Users/asgeo1/.rvm/bin:/usr/local/php54/bin:/Users/asgeo1/Projects/dotfiles/bin:/Applications/Postgres.app/Contents/MacOS/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/X11/bin

Nada óbvio aí que eu possa ver.

Por favor, alguém lançar alguma luz sobre isso. É muito frustrante eu!

EDITAR: parece que alguém teve um problema semelhante antes: Interromper a conclusão da tabulação sugerindo 'messagebus' Não há respostas sobre isso embora :(

UPDATE: Esta é a função cd que se aplica a oh-my-zsh:

→  ~  which cd
cd () {
    if [[ "x$*" = "x..." ]]
    then
            cd ../..
    elif [[ "x$*" = "x...." ]]
    then
            cd ../../..
    elif [[ "x$*" = "x....." ]]
    then
        cd ../../..
    elif [[ "x$*" = "x......" ]]
    then
            cd ../../../..
    else
            builtin cd "$@"
    fi
}
    
por asgeo1 03.12.2012 / 00:50

1 resposta

5

_kadmin é provavelmente uma função completa para a ferramenta kadmin - não um diretório. Se você tentar a conclusão em algo que zsh não possa encontrar como um comando, um diretório ou uma conclusão de argumento de comando válida e conhecida, ele começará a oferecer funções de conclusão como possíveis candidatos de expansão. Por padrão, zsh vem com muitos completadores, muitos dos quais você pode não precisar - existem pacotes configuráveis para AIX, BSD, Cygwin, várias distribuições Linux, etc, e todos são lidos e instalados no shell. Se você tentar uma expansão em algo que o zsh não possa encontrar, ele terá todas as funções de conclusão instaladas para lhe oferecer.

Você configura zsh para não oferecer funções complementares, colocando isso em ~/.zshrc :

zstyle ':completion:*:functions' ignored-patterns '_*'

Recarregue o arquivo e você não deverá mais oferecer funções de conclusão para as ferramentas que você não instalou. Dê uma olhada na% man_de% manpage para (muito) mais detalhes.

EDITAR em resposta ao UPDATE 3

Se zshcompsys for realmente uma conta de usuário, você poderá configurar _kadmin para não oferecê-la em conclusões. Parece que a abordagem é listar as contas de usuário que você deseja que o shell considere, o que limita os nomes oferecidos apenas aos listados. A linha zsh é algo assim:

zstyle ':completion:*' users asgeo1 root

Acho que você pode listar quantos usuários quiser depois da tag zstyle . O shell só oferecerá os diretórios iniciais desses usuários como conclusões possíveis para a função users ou interna.

Não sei por que adicionar o nome de usuário aos padrões ignorados no arquivo cd não funcionou - você recarregou sua configuração depois de fazer a alteração?

    
por 03.12.2012 / 12:33