如何在ZSH提示符中使用转义序列以实现真彩色或粗体?

9

我正在定制我的ZSH提示符,但似乎无法使用转义序列告诉Konsole使用粗体文本或特定的RGB颜色。

我知道ZSH中的内置格式选项,比如%F{000} %f,但据我所知,这些选项只允许访问默认值(红色,蓝色等)和256色调色板。虽然内置的加粗选项%B %b确实有效,但似乎限于一个颜色。

我想要做的是使用所有RGB颜色着色特定部分的提示符,或使其加粗。从我找到的信息来看,应该像这样工作:

PS1="%{\e[38;0;255;0;255m%}%M >:%{\e[0m%}"

那应该会给我一个像这样的粉色提示:
HOSTNAME >:                  

但是我得到的是这样的结果:
\e[38;0;255;0;255mHOSTNAME >:\e[0m

我尝试了不同的转义序列,如\033\x1b,但似乎都没有起作用。

那么,在ZSH提示符中如何正确使用转义序列呢?



具体:

OpenSUSE Tumbleweed KDE

Konsole --version 16.12.0 (Keyboard:XFree 4)

ZSH --version 5.3


就此而言,“所有RGB颜色”并不存在;虽然调色板可以更改,但仍是一个固定的集合:http://www.xfree86.org/current/ctlseqs.html - user2864740
这是88-no-million或256色调色板。标准真彩色只有24位或约1600万种颜色,并表示为值的组合。终端(任何VT系列)需要索引到固定的调色板表中。 - user2864740
我仍然认为这是一个公平的问题 - 只要记住,通过RGB访问颜色(而不更新调色板本身)可能是不可能的。 - user2864740
哦,太可爱了。这里有一些支持真彩色的终端。这已经超越了VT- - https://deductivelabs.com/en/2016/03/using-true-color-vim-tmux/;确保Konsole在列表中。 - user2864740
1
@user2864740 Konsole在这个列表中,我已经在这里检查过了:https://gist.github.com/XVilka/8346728 - 0x131
请注意,交互式shell定制通常是在[unix.se]上讨论的更好的话题,而不是在Stack Overflow上。后者主要关注编写软件。 - Charles Duffy
3个回答

6
你需要更改字符串,以便zsh可以正确地评估它们。
尝试更改:
PS1="%{\e[38;0;255;0;255m%}%M >:%{\e[0m%}"
为:
PS1=$'%{\e[38;0;255;0;255m%}%M >:%{\e[0m%}'
注意从双引号 " 到单引号 ' 的更改,以及前面添加的 $ 符号。
有关替换的更多信息,请参见 http://zsh.sourceforge.net/Guide/zshguide05.html

1

我可能来晚了,但在ZSH上,你的答案将是:

PS1="%F{green}%M >:%f"

你的原始代码使用了ANSI转义序列来进行颜色格式化,但在所有Zsh终端中可能无法正常工作。这个更新后的代码使用了Zsh特定的提示转义序列(%F{color_code}和%K{color_code})来分别设置前景色和背景色。
要应用这个更改,你需要将它设置在位于~/.zshrc的.zshrc文件中。
运行以下命令可以自动设置(它不会覆盖任何现有的设置):
touch ~/.zshrc && echo '\nPS1="%F{green}%M >:%f"' >> ~/.zshrc && echo "Success";

这里有一个StackOverflow的问题,回答了zsh中颜色是如何工作的。

OP已经知道%F等等的事情。 - Thomas Dickey

0
您可以使用RGB三元组通过%F来指定任意24位颜色。
% print -P "%F{#009090}tealish"
tealish

(你必须想象适当的颜色,因为我无法仅使用文字来复制它。)


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