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

Spe*_*bun 7 prompt zsh variable-substitution

我正在根据oh-my-zshdallas主题和dstufft主题调整我的 zsh 提示。我喜欢 dallas 将提示的各个部分包含在变量中的方式,这使得更容易理解发生了什么。

问题是,这些字符串被评估一次以进行扩展。所以当我尝试使用动态的东西时,比如${PWD/#$HOME/~}dstufft,那么它就不再动态更新了。

我怎样才能做到两全其美?我希望将提示分解为每次编写提示时进行评估的小节。

Gil*_*il' 15

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

setopt prompt_subst
Run Code Online (Sandbox Code Playgroud)

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

PS1='${PWD/#$HOME/~}'
Run Code Online (Sandbox Code Playgroud)

单引号保护特殊字符,例如$在设置变量时不被评估。

  • 呵呵!我不敢相信我使用的是双引号而不是单引号。太多的Windoze... (3认同)

小智 5

在zsh中,precmd可以在每次提示之前做任何事情(比如设置一个变量):

function precmd() {
    current_git_branch=`git rev-parse --abbrev-ref HEAD`
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 如果您使用的是 oh-my-zsh,请不要将您的函数命名为 `precmd()`,而是使用不同的名称,例如 `extra_precmd()` 并在您的 `~/.zshrc` 中添加一个 `precmd_functions+=extra_precmd` 之后的某处来源`oh-my-zsh.sh` (2认同)