6

我正在使用这里给出的答案:zsh ansi color codes 如何工作?格式化并为我的 zsh 提示添加颜色。

有没有办法根据某些条件格式化提示?

例如,如果主机名中包含单词PROD,那么我希望我的提示具有红色背景。否则,我想要没有背景和粗体的绿色文本。

4

3 回答 3

2

您可以设置一个precmd功能,在每次显示之前重置您的提示。

set_red_prompt_background () {
  if [[ ${(%):-%M} = *PROD* ]]; then
    PS1="%K{red}$PS1%k"
  else
    PS1="%F{green}%B$PS1%f%b"
  fi
}

typeset -a precmd_functions
precmd_functions+=(set_red_prompt_background)

这未经测试,所以如果它按原样工作,我会感到惊讶。但这就是它的工作方式。

  • ${:-foo}是一种特殊类型的“参数”扩展,它只是扩展为:-. 乍一看好像没什么用...
  • ${(%):-%M}与上面相同,但具有(%)指示zsh处理扩展中发现的任何提示转义的标志。这变成了一种奇特的方式来获取使用%M转义符出现在提示符中的完整主机名。
  • 检查它是否与模式匹配*PROD*,即主机名是否包含PROD。
  • 取任何值PS1,并将其包裹%K{red}...%k以使背景变为红色。请注意,这可能会覆盖已在PS1.
  • 添加set_red_prompt_background到在显示提示之前执行的函数列表。如果在此之后添加任何函数,它们可能会覆盖您在此处设置的颜色。
于 2013-11-06T20:29:52.037 回答
0

现在很容易你可以使用条件子字符串
这是语法%(condition.ifTrue.ifFalse)

export PROMPT="%(%m==PROD.ifTrue.ifFalse)"
于 2021-05-23T07:07:47.797 回答
-3

编辑根目录中的 .zprofile 文件,并在登录的特定用户上应用条件。

于 2013-11-06T20:31:13.430 回答