怎么做:在Gnome Terminal中加下划线,粗体,斜体,删除线,颜色,背景和大小?


58

怎么做:在Gnome Terminal中加下划线,加粗,斜体,删除线和颜色?

胆大

斜体

强调

s̶t̶r̶i̶k̶e̶̶i̶t̶̶l̶i̶k̶̶e̶̶i̶t̶s̶̶h̶o̶t

颜色

background

font <(如果您无法分辨,则为单声道)

尺寸


1
到底要改变什么?提示符,输入的文本,命令的输出?
RaduRădeanu2014年

实际输出PS1。尽管我也希望它可以用于基本回声。
Akiva 2014年

1
如果它支持“ Faint”,我会切换。:(
尔根A.艾哈德

Answers:


75

ANSI / VT100终端和终端仿真器不仅可以显示黑白文本,还可以显示黑白文本。由于转义序列,它们可以显示颜色和格式化的文本。这些序列由转义字符(通常由“ ^ [”或“ Esc”表示)以及其他一些字符组成:“ Esc [FormatCodem”。

在Bash中,可以使用以下语法获取字符:

\e
\033
\x1B

在此处输入图片说明

命令(为方便复制粘贴):

echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"

来源(包括所有类型的前景色/背景色代码):http : //misc.flogisoft.com/bash/tip_colors_and_formatting


我又增加了三个尺寸,字体和背景。这些可能吗?
Akiva 2014年

1
@Akiva您可以轻松更改背景颜色(请参阅专用部分)。关于大小,我认为不可能。对于字体,唯一的设置是全局gconf值(/apps/gnome-terminal/profiles/Default/font
Sylvain Pineau 2014年

1
@dashesy:根据en.wikipedia.org/wiki/ANSI_escape_code,53应该做上划线。但是在我的终端上什么也没做。
西尔文·皮内

1
@egmont我记得我想在PS1(实际上是在gnome-terminal中)使用它,因为在其下面的文本中掺入了下划线,使其难以阅读,当然删除线看起来是错误的。在上面有一行有助于向上滚动时发现先前的命令(颜色也是如此)。
dashesy

1
@dashesy谢谢,这实际上是一个非常酷的用例:) 在此跟踪Gnome终端的进度。
egmont

26

为了扩展Sylvain的答案,一些帮助功能:

ansi()          { echo -e "\e[${1}m${*:2}\e[0m"; }
bold()          { ansi 1 "$@"; }
italic()        { ansi 3 "$@"; }
underline()     { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red()           { ansi 31 "$@"; }

然后

在此处输入图片说明


20

尚未覆盖丈二和尚是组合的两个或三个参数,如大胆强调,在预定义的颜色。这是通过3向语法实现的,例如:

~$ printf "\e[3;4;33mthis is a test\n\e[0m"

将导致“这是一个测试”以黄色(33m),斜体(3m)和带下划线(4m)的形式打印。
请注意,这是不是必要的重复\e[每次。
也要注意(类似于Sylvain),我\e[0m每次都还添加了一个来重置设置,因为否则黄色和字体样式将在终端中保持激活状态!不用说,您绝对需要提防这些错误,以便在脚本中重置,因为如果您的脚本在终端中永久修改其颜色和样式设置,那么使用脚本的用户可能会不喜欢它!


16

GNOME Terminal 3.28(VTE 0.52)在Ubuntu 18.04 LTS中首次亮相,增加了对更多样式的支持,包括Kitty中所见的卷曲和彩色下划线,Konsole中所见的上划线,以及最后每个人都非常喜欢或讨厌的眨眼属性。

假定VTE至少为0.52版本,它们也可以在任何其他基于VTE的终端仿真器(例如Tilix,Terminator,Xfce4终端,Guake等)中自动运行。

这是一个演示标准转义序列以及GNOME终端(VTE)补充的列表。请注意,对于每个打开顺序,我也仅显示该属性的关闭顺序,而不是通用\e[m\e[0m禁用所有特殊模式的关闭顺序。

echo -e '\e[1mbold\e[22m'
echo -e '\e[2mdim\e[22m'
echo -e '\e[3mitalic\e[23m'
echo -e '\e[4munderline\e[24m'
echo -e '\e[4:1mthis is also underline (new in 0.52)\e[4:0m'
echo -e '\e[21mdouble underline (new in 0.52)\e[24m'
echo -e '\e[4:2mthis is also double underline (new in 0.52)\e[4:0m'
echo -e '\e[4:3mcurly underline (new in 0.52)\e[4:0m'
echo -e '\e[5mblink (new in 0.52)\e[25m'
echo -e '\e[7mreverse\e[27m'
echo -e '\e[8minvisible\e[28m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[29m'
echo -e '\e[53moverline (new in 0.52)\e[55m'

echo -e '\e[31mred\e[39m'
echo -e '\e[91mbright red\e[39m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[39m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[39m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) (new in 0.52)\e[39m'
echo -e '\e[38:2:240:143:104mtruecolor, rarely used incorrect format (might be removed at some point)\e[39m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[39m'

echo -e '\e[46mcyan background\e[49m'
echo -e '\e[106mbright cyan background\e[49m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[49m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[49m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) (new in 0.52)\e[49m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[49m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[49m'

echo -e '\e[21m\e[58:5:42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[21m\e[58;5;42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[4:3m\e[58:2::240:143:104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58:2:240:143:104mtruecolor underline (new in 0.52) (might be removed at some point) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'

(*)下划线的Truecolor值略为近似。

有点奇怪的是,它不完全适合此图片,因为它更多的是功能而不是样式,但这里可能值得一提,是与iTerm2共同设计的超链接支持,自GNOME Terminal 3.26(VTE 0.50)起可用。 :

echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'

这是演示结果的屏幕截图: 在gnome终端3.28中渲染


2
对于我们这些没有这些gnome-terminal / vte版本的人来说,结果的屏幕快照将非常可爱。
Marius Gedminas

@MariusGedminas完成。
egmont

很棒的答案!感谢您抽出宝贵的时间来收集所有这些信息!我想知道他们是否也可以在iTerm2上工作(不久后将尝试亲自检查一下...)
filbranden

2

将这些硬编码序列替换为:

tput smul # set underline
tput rmul # remove underline

tput smso # set bold on
tput rmso # remove bold

tput setaf 1 #red
tput setaf 2 #green
...
tput cup 0 0 # move to pos 0,0

有关这些命令的完整说明,请参见“ man terminfo”和“ man tput”。

范例:

function f_help { c_green=$(tput setaf 2 2>/dev/null) c_reset=$(tput sgr0 2>/dev/null) c_bold=$(tput smso 2>/dev/null) echo "${c_bold}DESCRIPTION${c_reset} : .... ${c_green}My green text${c_reset}My plain text" }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.