Cómo deshabilitar "auto cd" en zsh con oh-my-zsh

29

Googlear esto no mostró ningún resultado. Esto es lo que quiero decir: tengo un archivo binario llamado xen mi ruta (no la carpeta actual, pero está en el PATH), y también una carpeta con el mismo nombre en el directorio de trabajo actual. Si escribo x, quiero que el binario se ejecute, pero en su lugar, está en esa carpeta. ¿Cómo puedo solucionar esto?

Gabi Purcaru
fuente

Respuestas:

46

Eso es tres preguntas en una ;-)

Opción AUTO_CD y cómo encontrarla

En primer lugar, la opción que está buscando es AUTO_CD. Puede encontrarlo fácilmente mirando hacia arriba man zshoptions. Use la función de búsqueda de buscapersonas, generalmente presiona /e ingresa la palabra clave. Con nusted salta a la próxima aparición. Esto mostrará lo siguiente:

[..]
   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.
[..]

La opción se puede deshabilitar usando unsetopt AUTO_CD.

Apagándolo correctamente

Estás utilizando oh-my-zsh, que se describe como

"Un marco basado en la comunidad para administrar su configuración de zsh" Incluye más de 120 complementos opcionales (rails, git, OSX, hub, capistrano, brew, ant, macports, etc.), ...

Entonces, lo siguiente es averiguar cómo habilitar / deshabilitar las opciones de acuerdo con el marco.

El archivo readme.textile indica que la forma preferida de habilitar / deshabilitar complementos sería una entrada en su .zshrc: plugins=(git osx ruby) descubra qué complemento usa la opción AUTO_CD. Como se descubrió en la página de manual, se puede invocar a través del modificador -J o AUTO_CD. Como oh-my-zsh está disponible en github, al buscarlo aparecerá el archivo lib/theme-and-appearance.zsh. Si no desea deshabilitar todo el complemento "tema y apariencia", coloque un unsetopt AUTO_CDarchivo en su .zshrc. No modifique los archivos de oh-my-zsh directamente, porque en caso de que esté actualizando el marco, sus cambios se perderán.

Por qué los ejecutables no se invocan directamente

Su tercera pregunta es cómo ejecutar un binario directamente: debe ejecutar su archivo binario a través de una ruta, por ejemplo con un prefijo ./como en ./do-something. Esta es una especie de característica de seguridad y no se debe cambiar. La idea de enchufar un dispositivo USB, montarlo y echarle un vistazo ls. Si hay un ejecutable llamado lsque elimina su directorio de inicio, todo desaparecería, ya que esto habría sobrescrito el orden de su $ PATH.

Si tiene comandos que llama repetidamente, configurar un alias en su .zshrc sería una solución común.

echox
fuente
44
¡Muchas gracias! Lo que necesitaba era la unsetopt auto_cdlínea (sin embargo, mencioné explícitamente que el ejecutable está en mi camino; sin embargo, la explicación podría ayudar a otros usuarios a resolver las cosas).
Gabi Purcaru
Gracias por la respuesta exhaustiva y por proporcionar detalles sobre cómo encontró la información (ayudando así a otros a encontrar información como esta en el futuro).
corte final del
2
Tu último párrafo no tiene sentido. El OP está preguntando acerca de un binario en su PATHvariable de entorno que quieren tener prioridad sobre autocd. No tiene nada que ver con la incapacidad del script de shell para ejecutar un ejecutable desde una ruta sin especificar ninguno ./o /.
Qix
El primer enlace al archivo Léame no funciona. Aqui esta. Además, el libdirectorio OMZ no tiene nada que hacer con. pluginsEn cuanto a la pregunta y, como dijiste, el comando correcto es unsetopt.
Timo