答案1
这记录在上两段中的另一个表格。
一般规则是,ESC [ ... m
由以下列表组成单独的 SGR 格式代码。第一个参数没有特殊含义——1
只是“粗体”或“亮体”文本的格式代码。(是否将文本设为粗体、亮体或两者皆可由终端决定。)
作为一个更复杂的例子,ESC[;1;3;31;47m
首先重置格式(0),然后使文本变为粗体(1)和斜体(3),然后将前景设置为红色(31),将背景设置为白色(47)。
一般规则的例外情况:
请注意,“事实上”接受的 256 色和真彩色代码格式违反了此语法。例如,指定颜色 #42 的正确方法是ESC[38:5:42m
(“38:5:42”是单个格式代码),但通常写为ESC[38;5;42m
(好像它们是 3 个单独的代码),并且终端通常会有特殊处理来重新组合这 3 个参数。
类似地,24 位或真彩色代码的正式写法是ESC[38:2::R:G:Bm
(具有多个子字段的单个代码),但您经常会看到ESC[38;2;R;G;Bm
相反的情况。这在终端中也有特殊处理,因为 5 个单独的“代码”被重新组合成单个真彩色格式代码。
答案2
我想用附注来修改用户 1686 的优秀答案。
传统上,终端仅支持 16 种颜色(8 种基本颜色及其更亮的颜色)。后来出现了 256 种颜色支持,并得到了广泛应用,如今几乎每个终端仿真器都支持它们。在过去几年中,真彩色(16M 种颜色)扩展也变得相当普遍。但是,ESC[1m
仍然只影响前 8 种调色板颜色的亮度,并且只影响前景色。(改变直接 RGB 真彩色值肯定是没有意义的。)
同时,虽然其他字体或装饰有独立且明确的代码(例如 3 表示斜体,4 表示下划线等),但没有办法启用粗体字体而不产生副作用。
为了清除这一遗留问题并能够顺利向前发展,一些终端仿真器特意决定ESC[1m
只允许切换到粗体字体,而不改变颜色。有些将此设为默认设置,同时允许您切换回旧行为,有些仅支持这种仅粗体行为。
我希望将来会有越来越多的终端模拟器走这条路。