3

我的.bashrc PS1(删节)是

\u\[\e[01;3$(($RANDOM % 8))m\]@\h \w $'

使用 bash 的工作方式,它会在每个命令之后插入随机颜色,因此每次@都是不同的颜色(至少在 31-37 范围内)。

但是,我一直无法在 zsh 中做类似的事情。该$''语法不允许命令替换,并且连接也不起作用:

$'\e[01;3'$(($RANDOM % 8))
# The \e[01;3 character is printed first, then the random number

使用引号"也不起作用;它只是打印出一个文字\e...

我知道 zsh 也有一些内置的文本颜色,例如%{$fg[red]%},我可以以某种方式从数组中选择一种随机颜色,但问题是它需要由 随机选择,PS1而不仅仅是在启动时随机选择只有一次。

有什么办法可以在 zsh 的 PS1 中插入一个随机数来实现这一点?

4

1 回答 1

4

您可以使用将在每个提示之前评估的precmd钩子:

randomise_prompt_colour () {
  PS1="%n%B%F{$((RANDOM % 8))}@%m %~ %(!.#.\$) "
}

add-zsh-hook precmd randomise_prompt_colour
于 2013-02-27T20:12:54.920 回答