ZSH setopt PROMPT_SUBST无法正常工作

时间:2016-09-25 17:33:46

标签: zsh

我正在尝试自定义我的zsh提示符,并希望每次生成提示时都使用git命令评估函数。我正在使用setopt PROMPT_SUBST,但它似乎不起作用。这是我的zshrc:

setopt PROMPT_SUBST
autoload -U colors && colors # Enable colors

# Show Git branch/tag, or name-rev if on detached head
parse_git_branch() {
  echo "PARSING GIT BRANCH"
  (git symbolic-ref -q HEAD || git name-rev --name-only --no-undefined --always HEAD) 2> /dev/null
}

prompt() {
    echo -n "%/"
    echo "$(git status)"
}

PS1="$(prompt)"

这是我setopt的输出:

interactive
login
monitor
nonomatch
promptsubst
shinstdin
zle

1 个答案:

答案 0 :(得分:1)

您需要延迟调用prompt,直到显示提示为止;通过使用单引号来做到这一点:

PS1='$(prompt)'

更好的想法是定义一个设置PS1的函数,然后将该函数添加到precmd_functions数组中,以便在显示每个提示之前执行该函数。

prompt () {
    PS1="%/$(git status)"
}

precmd_functions+=(prompt)