每次在 zsh 中显示提示时重新评估提示表达式

每次在 zsh 中显示提示时重新评估提示表达式

我正在根据以下内容调整我的 zsh 提示符达拉斯主题和数据主题来自哦我的zsh。我喜欢 dallas 将提示的各个部分包含在变量中,这使得更容易理解正在发生的事情。

问题是,这些字符串被评估一次用于扩展。因此,当我尝试使用动态的东西(例如${PWD/#$HOME/~}dstufft )时,它不再动态更新。

我怎样才能两全其美?我希望将提示分成几个小节,每次编写提示时都会对其进行评估。

答案1

确保prompt_subst选项已打开。如有必要,请将以下行添加到您的~/.zshrc

setopt prompt_subst

这告诉 zsh 每次显示提示时重新评估提示字符串。然后,确保您PS1根据需要进行分配(或提示主题使用的其他变量):

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

单引号可以保护特殊字符,例如$在设置变量时不被计算。

答案2

在 zsh 中,在precmd每个提示之前可以执行任何操作(例如设置变量):

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

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

对于当前目录来说,这并不像原始问题那样必要,但对于在其他情况下找到此问题的人可能会有所帮助。

(precmd 仅限 zsh — 在 bash 中,有$PROMPT_COMMAND.)

答案3

好的,

我只需要逃避我的$迹象。例如:

${PWD/#$HOME/~}
\${PWD/#\$HOME/~}

答案4

在 zsh 中,您应该%为此使用转义符。例如,而不是${PWD/#$HOME/~}(如您的示例),只需使用%~.

阅读zshall(1)并寻找简单快捷的逃脱(这里引用太长了)。

相关内容