Let's say I cd to /usr/local/bin but I want to change my pwd to /usr/bin, how can I do that with zsh? I know I can do things like cd /a/b/ and then cd b c in order to change my pwd to /a/b, but I can't quite figure out how to do what I desire.

2 Answers 2


Given the flexible functionality of zsh's cd, there are at least three ways to do what you desire. You can either write cd /usr/local /usr or cd local / or cd local/bin bin. One can probably come up with more solutions.

cd's syntax in zsh is cd OLD NEW. This command matches your $PWD with OLD and replaces any matching parts with NEW. You should keep in mind that cd works relative to your current directory, so if you write cd /usr/local usr while in /usr/local/bin, zsh will give you an error, because there is no such directory as /usr/local/bin/usr/bin. Always watch the slashes.


You can use the two-argument form of cd to replace a substring of the current working directory. For example, to remove /local, you can use

cd /local ''

Since multiple slashes don't make any difference, you can also write this as cd /local / (results in /usr//bin, then the double slash is simplified to a single one) or cd local / (also results in /usr//bin).

Another approach is to use command line edition. With the default settings, type cd $PWD on the command line, then press Tab: the variable substitution is replaced by the variable's value, and you can edit it to your leisure. Under setopt auto_cd, you don't need to write cd first. If your configuration causes Tab not to expand the variable, use whatever key invokes the zle function expand-or-complete rather than complete-word.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.