Here's a .zshrc-level workaround to try: functions -c -- _normal _normal@c:drive _normal () { if compset -P /c/ then local opwd=$PWD ret cd /c || return 1 _normal@c:drive "$@" ret=$? cd $opwd return ret else _normal@c:drive "$@" fi }