如何根据条件格式化zsh提示符?

时间:2013-11-06 19:01:11

标签: linux terminal command-prompt zsh prompt

我正在使用此处给出的答案:How do zsh ansi colour codes work?格式化并为我的zsh提示添加颜色。

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

例如,如果主机名中包含单词PROD,那么我希望我的提示有红色背景。否则,我不喜欢背景和大胆的绿色文字。

3 个答案:

答案 0 :(得分:1)

您可以设置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添加到显示提示之前执行的功能列表中。如果在此之后添加任何函数,它们可能会覆盖您在此处设置的颜色。

答案 1 :(得分:0)

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

export PROMPT="%(%m==PROD.ifTrue.ifFalse)"

答案 2 :(得分:-3)

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