Terminal

ZShell 中的 16 種顏色

  • August 12, 2014

我似乎只能在我的 zshell 提示符中呼叫 8 種顏色。

例子:

PROMPT="[%n@%{$fg[magenta]%}%m%{$reset_color%} %.]
%# "

工作正常。然而,

PROMPT="[%n@%{$fg[brmagenta]%}%m%{$reset_color%} %.]
%# "

不工作。基本上,沒有出現任何“明亮”的顏色變化。

經過一番研究,我發現 zsh 的顏色是由“顏色”setopt 呼叫的。

正在做

echo ${(o)color}

產生這個輸出:

00 01 02 03 04 05 07 08 22 23 24 25 27 28 30 30 30 30 31 31 32 32 33 33 34 34 35 35 36 36
37 37 39 39 40 40 41 42 43 44 45 46 47 49 bg-black bg-blue bg-cyan bg-default bg-green
bg-magenta bg-red bg-white bg-yellow black blink blue bold conceal cyan default faint green
magenta no-blink no-conceal no-reverse no-standout no-underline none normal red reverse
standout underline white yellow

如您所見,只有標準的 8 種顏色可用。我嘗試使用“bg-”變體,它也將輸出保留為預設文本顏色。

您可以提供的任何幫助將不勝感激。當然,我可以只使用一種普通顏色,但我什麼也學不到!

你用的是什麼終端模擬器?您可以通過執行檢查支持的顏色數量echotc Co。例如,我的urxvt支持 88 種顏色,但xterm只支持 8 種,並且不包括明亮的變化。

如果我在其中執行它,urxvt我會得到:

# Dark magenta/violet:
PS1="[%F{34}%n%F{reset}@%F{magenta}%m%F{reset} %.] " 
# Bright Thistle purple:
PS1="[%F{54}%n%F{reset}@%F{magenta}%m%F{reset} %.] "

資料來源:man zshall

您所說的所有“顏色”都只是 form 中的轉義序列\e[{color_code}m。Zsh 函式colors只添加一些 zsh 關聯數組變數,將人類可讀的顏色名稱映射到終端轉義序列。因此,您可以直接使用

PS1=%{$'\e[54m'%}...

或嘗試@Mischa Arefiev 的答案,它更具可讀性。請注意,轉義序列在任何 shell 中都有效,而類似的結構%F{54}...僅在 zsh 中有效。

引用自:https://unix.stackexchange.com/questions/32273