我正在使用此处给出的答案:How do zsh ansi colour codes work?格式化并为我的zsh提示添加颜色。
有没有办法根据某些条件格式化提示?
例如,如果主机名中包含单词PROD
,那么我希望我的提示有红色背景。否则,我不喜欢背景和大胆的绿色文字。
答案 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文件,并在登录的特定用户上应用条件。