I found OLDPWD's value doesn't influence 'cd -' if changed before run, like what bash will do: [hpt@hpt]~% echo $OLDPWD /home/hpt [hpt@hpt]~% vared OLDPWD /tmp [hpt@hpt]~% echo $OLDPWD /tmp [hpt@hpt]~% cd - ~ [hpt@hpt]~% pwd /home/hpt This patch will let zsh check OLDPWD before run 'cd -', so let OLDPWD influence it: [hpt@hpt]~% echo $OLDPWD /home/hpt [hpt@hpt]~% vared OLDPWD /tmp [hpt@hpt]~% cd - /tmp [hpt@hpt]/tmp% pwd /tmp [hpt@hpt]/tmp%