我正在使用这里给出的答案:zsh ansi color codes 如何工作?格式化并为我的 zsh 提示添加颜色。
有没有办法根据某些条件格式化提示?
例如,如果主机名中包含单词PROD
,那么我希望我的提示具有红色背景。否则,我想要没有背景和粗体的绿色文本。
我正在使用这里给出的答案:zsh ansi color codes 如何工作?格式化并为我的 zsh 提示添加颜色。
有没有办法根据某些条件格式化提示?
例如,如果主机名中包含单词PROD
,那么我希望我的提示具有红色背景。否则,我想要没有背景和粗体的绿色文本。
您可以设置一个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
到在显示提示之前执行的函数列表。如果在此之后添加任何函数,它们可能会覆盖您在此处设置的颜色。现在很容易你可以使用条件子字符串
这是语法%(condition.ifTrue.ifFalse)
export PROMPT="%(%m==PROD.ifTrue.ifFalse)"
编辑根目录中的 .zprofile 文件,并在登录的特定用户上应用条件。