![在不使用 PROMPT_SUBST 的情况下处理 $psvar 内的提示指令](https://linux22.com/image/136605/%E5%9C%A8%E4%B8%8D%E4%BD%BF%E7%94%A8%20PROMPT_SUBST%20%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E5%A4%84%E7%90%86%20%24psvar%20%E5%86%85%E7%9A%84%E6%8F%90%E7%A4%BA%E6%8C%87%E4%BB%A4.png)
我用来在提示中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
%-expandos 的结果不会重新扩展,因此插入的任何内容都会
%v
按字面意思出现在最终提示中。
所以看来唯一的办法就是使用set -o prompt_subst
.