How to disable "auto cd" in zsh with oh-my-zsh

Thats three questions in one ;-)

AUTO_CD Option and howto find it

First of all the option you are looking for is AUTO_CD. You can easily find it by looking up man zshoptions. Use your pagers search function, usually you press / and enter the keyword. With n you jump to the next occurrence. This will bring up the following:

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

The option can be unset using unsetopt AUTO_CD.

Turning it properly off

You are using oh-my-zsh which is described as

"A community-driven framework for managing your zsh configuration" Includes 120+ optional plugins (rails, git, OSX, hub, capistrano, brew, ant, macports, etc), ...

So the next thing is to find out, how to enable/disable options according to the framework.

The readme.textile file states that the prefered way to enable/disable plugins would be an entry in your .zshrc: plugins=(git osx ruby) Find out which plugin uses the AUTO_CD option. As discovered from the manpage it can be invoked via the -J switch or AUTO_CD. Since oh-my-zsh is available on github, searching for it will turn up the file lib/theme-and-appearance.zsh. If you don't want to disable the whole plugin "theme-and-appearance", put a unsetopt AUTO_CD in your .zshrc. Don't modify the files of oh-my-zsh directly, because in case you are updating the framework, your changes will be lost.

Why executables are not invoked directly

Your third question is howto execute a binary directly: You have to execute your binary file via a path, for example with a prefixed ./ as in ./do-something. This is some kind of a security feature and should not be changed. hing of plugging in an USB stick, mounting it and having a look on it with ls. If there is a executable called ls which deletes your home directory, everything would be gone, since this would have overwritten the order of your $PATH.

If you have commands you call repeatedly, setting up an alias in your .zshrc would be a common solution.


This worked for me:

unsetopt autocd