Reevaluate the prompt expression each time a prompt is displayed in zsh

Make sure that the prompt_subst option is turned on. If necessary, add the following line to your ~/.zshrc:

setopt prompt_subst

This tells zsh to reevaluate the prompt string each time it's displaying a prompt. Then, make sure you are assigning PS1 (or some other variable that is used by the prompt theme) as desired:

PS1='${PWD/#$HOME/~}'

The single quotes protect the special characters such as $ from being evaluated when you set the variable.


In zsh, precmd can do anything (such as setting a variable) before each prompt:

function precmd() {
    current_git_branch=`git rev-parse --abbrev-ref HEAD`
}

http://zsh.sourceforge.net/Doc/Release/Functions.html

This isn't so necessary for the current directory as in the original question, but may be helpful for people who find this question for other cases.

(precmd is zsh-only — in bash, there is $PROMPT_COMMAND.)