Como desativar o “auto cd” no zsh com o oh-my-zsh

29

A pesquisa no Google não mostrou nenhum resultado. Aqui está o que quero dizer: tenho um arquivo binário nomeado xno meu caminho (não a pasta atual, mas está no PATH) e também uma pasta com o mesmo nome no diretório de trabalho atual. Se eu digitar x, quero que o binário seja executado, mas, em vez disso, ele está nessa pasta. Como faço para corrigir isso?

Gabi Purcaru
fonte

Respostas:

46

São três perguntas em uma ;-)

Opção AUTO_CD e como encontrá-lo

Antes de mais nada, a opção que você procura é AUTO_CD. Você pode encontrá-lo facilmente olhando para cima man zshoptions. Use a função de busca de pagers, normalmente você pressiona /e insere a palavra-chave. Com nvocê pule para a próxima ocorrência. Isso trará o seguinte:

[..]
   Changing Directories
       AUTO_CD (-J)
              If  a  command is issued that can't be executed as a normal command, and the command is the name of a directory, perform the cd command to that directory.
[..]

A opção pode ser desabilitada usando unsetopt AUTO_CD.

Desligando-o corretamente

Você está usando oh-my-zsh, que é descrito como

"Uma estrutura orientada pela comunidade para gerenciar sua configuração zsh" Inclui mais de 120 plug-ins opcionais (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), ...

Portanto, o próximo passo é descobrir como ativar / desativar as opções de acordo com a estrutura.

O arquivo readme.textile afirma que a maneira preferida de ativar / desativar plug-ins seria uma entrada no seu arquivo .zshrc: plugins=(git osx ruby) Descubra qual plug-in usa a opção AUTO_CD. Como descoberto na página de manual, ele pode ser chamado pelo switch -J ou AUTO_CD. Como o oh-my-zsh está disponível no github, sua pesquisa aumentará o arquivo lib/theme-and-appearance.zsh. Se você não deseja desativar todo o plugin "tema e aparência", coloque um unsetopt AUTO_CDno seu .zshrc. Não modifique os arquivos do oh-my-zsh diretamente, porque caso você esteja atualizando a estrutura, suas alterações serão perdidas.

Por que os executáveis ​​não são chamados diretamente

Sua terceira pergunta é como executar um binário diretamente: você deve executar seu arquivo binário através de um caminho, por exemplo, com um prefixo ./como em ./do-something. Esse é um tipo de recurso de segurança e não deve ser alterado. como conectar um pendrive, montá-lo e dar uma olhada nele ls. Se houver um executável chamado lsque exclua seu diretório pessoal, tudo acabaria, pois isso teria sobrescrito a ordem do seu $ PATH.

Se você tiver comandos que você chama repetidamente, a configuração de um alias no seu .zshrc seria uma solução comum.

echox
fonte
4
Muito obrigado! O que eu precisava era da unsetopt auto_cdlinha (mencionei explicitamente que o executável está no meu caminho; no entanto, a explicação pode ajudar outros usuários a entender as coisas).
Gabi Purcaru
Obrigado pela resposta completa e por fornecer detalhes sobre como você encontrou as informações (ajudando assim outras pessoas a encontrar informações como essas sozinhas no futuro).
barra final
2
Seu último parágrafo não faz sentido. O OP está perguntando sobre um binário em sua PATHvariável de ambiente que eles querem ter precedência sobre o autocd. Não tem nada a ver com a incapacidade do shell script de executar um executável a partir de um caminho sem especificar um ./ou outro /.
Qix
O primeiro link para o leia-me não funciona. Aqui está. Além disso, o libdiretório pluginsOMZ não tem nada a ver com. Quanto à pergunta e, como você disse, o comando correto é unsetopt.
Timo