这个是在《C/C++程序员实用大全·精华版:C/C++最佳编程指南》一书中提到了"ANSI设备驱动器"。
要是通过彩色化提示符来增加个性化,就要用到转义序列。 转义序列就是一个让 shell 执行一个特殊步骤的控制指令。 转义序列通常都是以 ESC 开头(这也是它的命名原因)。 在 shell 里表示为 ^[。这种表示法需要一点时间去适应, 也可以用 \033 完成相同的工作(ESC 的 ASCII 码用十进制表示就是 27, = 用八进制表示的 33)。要直接在 shell 里面输入转义序列我们需要先按 ctrl-v:CTRL-v ESC。
转义序列 |
功能 |
示例 |
Esc[x;yH |
把光标放置在x行y列上 |
Esc[10;25H |
Esc[xA |
上移光标x行 |
Esc[1A |
Esc[xB |
下移光标x行 |
Esc[2B |
Esc[yC |
右移光标y列 |
Esc[10C |
Esc[yD |
左移光标y列 |
Esc[10D |
Esc[S |
存储光标当前的位置 |
Esc[S |
Esc[U |
恢复光标位置 |
Esc[U |
Esc[2J |
清屏,将光标移至起始位置 |
Esc[2J |
Esc[K |
清除至行尾 |
Esc[K |
C 语言示例
用绿色打印"Hello Word":
#include <stdio.h> int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0; } |
另外一个有用的转义序列是 printf("\033[2J"),它和 system(clear) 完成的功能一样。但是可以不需要头文件 unistd.h。
使用printf("\033[1K") 可以删除一行。