Nat*_*man 29 colors xterm ansi
我想从命令行更改我的 xterm 的颜色(背景、字体、前景)。我听说这可以使用 ANSI 转义序列来完成。
如果这是可能的:
Maj*_*nko 33
ANSI 转义序列由一系列以转义字符(字符 27)开头的字符组成。下一个字符通常(尽管不总是)是一个开方括号:[
如果指定-e
并\e
用于转义,echo 命令可以发送转义字符。
ANSI 标准定义了 8 种颜色,加上一种明亮模式,总共提供 16 种可能性。顺序是:
\e[<number>m
Run Code Online (Sandbox Code Playgroud)
其中<number>
之一是:
前景:
背景:
47白
0 全部重置
因此,要使您的前景为红色,背景为黄色:
$ echo -e "\e[31m\e[43m"
Run Code Online (Sandbox Code Playgroud)
并启用粗体:
$ echo -e "\e[1m"
Run Code Online (Sandbox Code Playgroud)
当然,您可以将它们全部组合在一起:
$ echo -e "\e[31m\e[43m\e[1m"
Run Code Online (Sandbox Code Playgroud)
还有许多其他转义码可以用于做其他事情。
例如 - 清除屏幕并将光标移动到左上角:
$ echo -e "\e[2J\e[1;1H"
Run Code Online (Sandbox Code Playgroud)
这在更改颜色时很有用:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Run Code Online (Sandbox Code Playgroud)
这将改变颜色,清除屏幕,并将光标放在左上角。好吧,几乎是左上角。Echo 输入一个回车,所以它向下移动一行。-n
如果你很挑剔,你可以添加到 echo 来防止这种情况。
如果您搞砸了一切并且看不到您正在输入的内容,您可以通过按以下键将终端颜色重置为正常:
Ctrl+v [ 0 m Return
您希望的是命令提示符。它会抱怨一个未知的命令,但你将能够再次看到你在做什么。
小智 29
请注意,现代 Xterms 支持 32 位颜色!
简单的例子。要设置一个漂亮的深紫色背景(嘿,每个人都有自己的)价值 #53186f,你可以:
echo -ne "\033]11;#53186f\007"
Run Code Online (Sandbox Code Playgroud)
请注意,这会立即更改整个窗口的颜色,而不仅仅是后续文本的颜色。这对于在通过 ssh 连接到服务器后使窗口明显不同(例如)特别好。将上面的“echo”放入您的 .bashrc 中,当您登录该服务器时,您的终端会自动更改颜色(但当您按下 Ctrl-D 时不会更改回来)
您可以在网上花费 HOURS 寻找此信息 - 大多数文档只讨论原始的 16 种 ANSI 颜色。
来源:http : //www.steike.com/code/xterm-colors/ 和http://rtfm.etla.org/xterm/ctlseq.html(在“操作系统控件”下查看)
请注意:上面的转义序列对 XTerms 有效,可能不适用于“类似 XTerm”的窗口终端仿真器的其他实现,它们可能“看起来”像 XTerm。例如,“gnome-terminal”或“konsole”有不同的转义序列,或者可能根本不实现颜色变化。
小智 5
是的。ANSI 终端支持ANSI 转义码。每个Control Sequence Introducer
( CSI
) 代码的格式如下:
ESC[<<<CODE>>>
Run Code Online (Sandbox Code Playgroud)
Ascii 字符27
(ESC
字符)或1b
十六进制,后跟左方括号,然后是表示要使用的操作的字母。
;
请注意,可以直接在参数之前提供分隔参数的列表<<<CODE>>>
。
CSI
现在,颜色使用代码的子集,即Select Graphic Rendition
代码。这些形式如下:
ESC[<<<SGR>>>m
Run Code Online (Sandbox Code Playgroud)
该SGR
代码作为参数传递CSI
。与您的问题相关的是SGR
代码 30-49。代码 30-39 设置前景色。代码 40-49 设置背景颜色。
30 - Foreground Black
31 - Foreground Red
32 - Foreground Green
33 - Foreground Yellow
34 - Foreground Blue
35 - Foreground Magenta
36 - Foreground Cyan
37 - Foreground White
40 - Background Black
41 - Background Red
42 - Background Green
43 - Background Yellow
44 - Background Blue
45 - Background Magenta
46 - Background Cyan
47 - Background White
Run Code Online (Sandbox Code Playgroud)
代码 38 和 48 是特殊代码。这些是允许您使用 RGB 值的。这些的格式是:
ESC[38;2;<r>;<g>;<b>m (Foreground)
ESC[48;2;<r>;<g>;<b>m (Background)
Run Code Online (Sandbox Code Playgroud)
注意:替代用途包括\x1b[<3 or 4>8;5;<web safe color index>m
. 通过这种用法,就有了完全不同的颜色编码。有关更多信息,请参阅此答案顶部的链接。
代码 39 和 49 将前景色和背景色设置为其默认值,这些颜色是根据终端定义的。
实际上,颜色 30-37 40-47 与标签上的颜色略有不同。
0 - Black
1 - Darker Red
2 - Darker Green
3 - Dark/Yellow or Brown (varies between terminals)
4 - Dark Blue
5 - Dark Magenta
6 - Dark Cyan
7 - Light Grey
Run Code Online (Sandbox Code Playgroud)
要获得浅色,可以使用 SGI 来表示粗体,1
. 粗体是一个误导性的名称。它不会使字体变粗。它实际上增加了文本的亮度。大胆应用后,颜色变成:
0 - Dark Grey
1 - Bright Red
2 - Bright Green
3 - Bright Yellow
4 - Bright Blue
5 - Bright Magenta
6 - Bright Cyan
7 - White
Run Code Online (Sandbox Code Playgroud)
注意:最后两块颜色的数字与前景和背景相关(<index> + (30 or 40)
)。
要删除所有样式(返回默认/正常模式),请使用SGR
0。
CSI
代码并不都是图形化的。例如,ESC[2J
将清除您的终端。ESC[<y>;<x>H
设置光标位置(1-索引)。请参阅维基百科文章以获取更多信息。
注意:要测试这些,请使用echo -e
或printf
。