如何定义自定义颜色以在ZSH提示符中使用?

9

我有些困难在配置我的zsh提示符。具体来说,我想让字体的颜色由十六进制代码 #87afdf 定义。

目前,我已经设置了提示符如下:

PROMPT='%B[%d] 
➞  %b'

我尝试以以下方式添加颜色:

autoload -U colors && colors

PROMPT='%{$fg[#87afdf]%}%B[%d]
➞  %b%{$reset_color%}'

但这只会给我以下无意义的话:
$fg[#87afdf][/Users/gregory]
➞  $reset_color

任何关于如何继续的想法都将不胜感激。
3个回答

22

你需要使用一个256色调色板。在ZSH中,您可以使用以下命令查看每个256种颜色的数字值:

for code in {000..255}; do print -P -- "$code: %F{$code}Color%f"; done

对于bash来说也是一样的:

for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Color"; done

7

Oh-My-Zsh用户的解决方案

如何显示可用颜色

如已提及,您需要使用256色调色板。查看可用颜色最简单的方法是使用以下命令(因为ZSH在spectrum下工作):

spectrum_ls 

此命令将打印所有可用的颜色。

enter image description here

...

enter image description here

如何在Oh-my-zsh主题中使用颜色

要在您的主题中使用颜色,您必须编写类似于$FG[<0-255>]的代码,例如$FG[172]
大小写可能很重要,因为$fg[172]在我的控制台上无效!

可能的问题

您的终端可能仅支持256种颜色而不是8种。如果是这样,执行spectrum_ls后您将无法看到所有颜色。
在这种情况下,您必须配置您的终端以支持256种颜色。

来源

https://dev.to/yujinyuz/custom-colors-in-oh-my-zsh-themes-4h13


我已经将 $fg[color] 改为 $FG[<#>],现在它可以正常工作了。但是如果我将 $fg_bold[color] 改为 $FG_BOLD[<#>],它仍然是纯白色的。我该如何使其成为自定义颜色并且加粗呢? - zoltankundi

3
除非你使用的是非常不寻常的终端,否则你不能使用任何你想要的颜色组合。标准终端器仅支持最多256种颜色(了解更多)。
zsh中附带的colors函数只是为了让旧16色调色板中的颜色能够通过名称调用,它无法帮助你使用超出此范围的颜色。
有一个简单的脚本可以设置$FG$BG数组,以提供一种方法来通过数字使用256色调色板中的颜色,但无需处理终端必须处理的转义序列。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接