在不使用 PROMPT_SUBST 的情况下处理 $psvar 内的提示指令

在不使用 PROMPT_SUBST 的情况下处理 $psvar 内的提示指令

我用来在提示中precmd生成彩色状态。git

我生成一个类似于 的刺痛%F{green}master%f%F{red}%f,并将其分配给$psvar[1].

我的提示包括%1v显示文本。

但是,我没有看到绿色和红色文本,而是看到分配的文字值。

有什么办法可以zsh解析 的内容吗$psvar

答案1

提示扩展不是递归的。您的提示中有%1v,因此 的内容$psvar[1]将插入到您的提示中。

不要将提示扩展指令放入 中$psvar,而是放入提示内容。插入终端转义序列以更改颜色。您可以使用colors为了那个原因。

autoload -U colors
colors
… {
  psvar[1]="$fg[green]$branch$fg[default]"
}

答案2

zsh-users邮件列表帖子说:

%-expandos 的结果不会重新扩展,因此插入的任何内容都会%v按字面意思出现在最终提示中。

所以看来唯一的办法就是使用set -o prompt_subst.

相关内容