美文网首页程序员初见Linux
12-2 提示符添加颜色及光标移动

12-2 提示符添加颜色及光标移动

作者: 見贤思齊_ | 来源:发表于2020-08-10 20:55 被阅读0次

三、添加颜色

大多数终端都会响应某些非打印字符序列,来控制光标位置、字符属性(如:颜色、粗体、文本闪烁)等内容

1.字符颜色

(1)是什么?

字符颜色是由发送到终端仿真器的一个 ANSI 转义代码来控制的,该转义代码嵌入到要显示的字符流中。(简单来讲,字符颜色就是1个ANSI转义代码)

控制代码不会“ 打印 ”到屏幕上,而是被终端解释为一条指令。在shell提示符中使用的转义字符表中可看到,“\ [ ” 和 "\ ]"这两个序列用来封装非打印字符串。

① 字符颜色(1个ASNI转义代码)组成

1个 ANSI 转义代码以八进制 033开始(该代码由转义键[escape key]产生),后面跟着1个可选的字符属性,之后是1条指令。

Ⅰ.示例

将文本颜色设置为正常(attribute=0)、黑色的代码是 \033[0;30m 。

(正常所代表的0,在转移代码中就是 “ ; ” 前的0)

② 设置文本颜色的转义序列(准)

以下列出了可用的文本颜色。

Ⅰ.注意:

这些颜色分为 2 组区别在于是否应用了粗体(bold)属性(1),这个属性使得色彩分为深色和浅色。

字符序列 文本颜色
\033[0;30m 黑色
\033[0;31m 红色
\033[0;32m 绿色
\033[0;33m 棕色
\033[0;34m 蓝色
\033[0;35m 紫色
\033[0;36m 青色
\033[0;37m 浅灰色
\033[1;30m 深灰色
\033[1;31m 淡红色
\033[1;32m 淡绿色
\033[1;33m 黄色
\033[1;34m 淡蓝色
\033[1;35m 淡紫色
\033[1;36m 淡青色
\033[1;37m 白色
③ 设置文本背景颜色的转义序列

使用以下代码可以设置文本的背景颜色,背景颜色不支持粗体属性

字符序列 背景颜色
\033[0;40m 黑色
\033[0;41m 红色
\033[0;42m 绿色
\033[0;43m 棕色
\033[0;44m 蓝色
\033[0;45m 紫色
\033[0;46m 青色
\033[0;47m 淡灰色

(2)怎么做?

以下通过几个实例来实现对字符颜色的改变。

① 红色提示符

将相应的转义代码插入到提示符的开端

PS1="\[\033[0;31m\]<\u@\h \W>\$ "
# 显示<用户名@不带域名的主机名 当前工作目录最后一部分>$ ,最后的空格会将$与光标分隔开

可以看到,提示符已经变成红色,但是此时用户输入的文本也变成了红色。

要修复这个问题,可以在提示符的末尾插入另一条转义代码,以通知终端仿真器恢复到原来的颜色。

PS1="\[\033[0;31m\]<\u@\h \W>\$\[\033[0m\]"
# \033[0m 这段代码告诉终端仿真器恢复到原来的颜色。
② 红色背景的提示符

通过为第一个转义代码做些许修改,就可创建带有红色背景的提示符。

PS1="\[\033[0;41m\]<\u@\h \W>\$\[\033[0m\]"

尝试下其他颜色的代码,看看分别能创造出何样的提示符。

(3)注意

文本除了正常(0)和粗体(1)属性外,还可以设置为下划线(4)、闪烁(5)和斜体(7)。

但为了维持好的品味,许多终端仿真器拒绝使用闪烁属性。

四、移动光标

转义代码也可以用来定位光标。比如在提示符出现的时候,这些转义代码通常用来在屏幕的不同位置(比如屏幕上方的一角)显示一个时钟或其它信息。

1.光标移动转义序列

字符序列 动作
\033[1;cH 将光标移动至 1 行 c 列。
\033[nA 将光标向上移动 n 行。
\033[nB 将光标向下移动 n 行。
\033[nC 将光标向前移动 n 个字符。
\033[nD 将光标向后移动 n 个字符。
\033[2J 清空屏幕并将光标移动至左上角(即第0行第0列)
\033[K 清空当前光标位置到行末的内容。
\033[s 存储当前光标位置。
\033[u 恢复之前存储的光标位置。

(1)示例

通过使用这些代码,用户可以构建这样的一条提示符。

每当提示符出现时,屏幕的上方会绘制出一个红色的横条,横条中有用黄色文本显示的时间。

用于提示符的编码就是以下这一个看起来很可怕的字符串:

PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "

# 这个一定要好好理解,其实就是多个转移字段在一起,分解开看就很容易。
① 复杂提示符的分解

以下是对上面这个字符串的每一部分进行分析。

字符序列 动作
\ [ 开始一个非打印字符序列。其真正目的是为了让 bash 正确计算可见提示符的长度。如果没有该字符,命令行编辑功能无法正确定位光标
\033[s 存储当前光标位置。在屏幕的顶端横条绘制完成并显示时间后,读取并使光标返回此位置。(需要注意的是,一些终端仿真器不支持该代码。)
\033[0;0H 将光标移动至 0 行 0 列(左上角)。
\033[0;41m 将背景颜色设置为红色。
\033[K 清空光标当前位置(左上角)到行末的内容。因为现在背景颜色已经是红色了,所以清空后的行就是红色,也就绘制出了红色的横条。(需要注意的是:清空行的内容并不会改变光标的位置,光标仍处于左上角)
\033[1;33m 将文本颜色设置为黄色。
\t 显示当前时间。尽管这是一个可打印的元素,但是还是将其包含在提示符非打印部分中,这是因为 bash 在计算可见提示符的长度时,不应当将其计算在内
\033[0m 关闭颜色。对文本和背景均有效。
\033[u 恢复之前存储的光标位置。
\ ] 结束非打印的字符序列。
<\u@\h \W>$ 提示符字符串。

五、保存提示符

很显然,用户不会想要每次都输入这样一长串代码,所以就需要将提示符存储在某个地方

将提示符添加到 .bashrc文件中是一个一劳永逸的解决办法,也就是将以下两行代码添加到文件中。

PS1="\[\033[s\033[0;0H\033[0;41m\033[K\033[1;33m\t\033[0m\033[u\]<\u@\h \W>\$ "

export PS1

相关文章

  • 12-2 提示符添加颜色及光标移动

    三、添加颜色 大多数终端都会响应某些非打印字符序列,来控制光标位置、字符属性(如:颜色、粗体、文本闪烁)等内容。 ...

  • linux命令行学习(59):提示符中设置光标定位的转义序列

    一、设置光标定位的用途 在提示符中,不但可以设置颜色,还可以设置光标定位,当然,也是通过转义序列来设置。 设置光标...

  • vim学习笔记01

    内容总结自vimtutor vim常用键及命令 移动 方向移动光标 使用计数移动光标 2w,光标向前移动两个单词 ...

  • VIM工具(一)

    摘要:5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 ...

  • Vim编辑器的基本应用(附加Vim速查卡)

    一. 添加文本 光标的移动与定位(1) 光标的移动命令。h、j、k、l:光标向左、下、上、右移动一个字符w:以单词...

  • Vim 大法

    命令执行格式 基础操作 按字符光标移动 按行光标移动 按照文本块移动 简单的文件编辑 添加文本 修改文本, 需告知...

  • 自定义Mac OS X终端样式

    简单修改 通过 终端-->偏好设置-->描述文件 简单配置字体,颜色,大小,光标等等 深入修改 1.设置提示符,路...

  • 基础-17、vim(一)

    笔记内容:5.1 vim介绍5.2 vim颜色显示和移动光标5.3 vim一般模式下移动光标5.4 vim一般模式...

  • 2018-10-08

    9月28日任务 5.1 vim介绍 5.2 vim颜色显示和移动光标 5.3 vim一般模式下移动光标 5.4 v...

  • Linux云计算学习笔记day08

    vim 一、 光标移动操作 h 光标向左移动 l 光标向右移动 j 光标向下移动 k 光标向上移动 gg 1G光标...

网友评论

    本文标题:12-2 提示符添加颜色及光标移动

    本文链接:https://www.haomeiwen.com/subject/hidrdktx.html