终端 - ^[[H^[[2J - 脱字符方括号 H 脱字符方括号 2 J

终端 - ^[[H^[[2J - 脱字符方括号 H 脱字符方括号 2 J

这个命令是什么?我知道,CSI n ; m H用于将光标移动到n行和m列,但是标题中的命令是什么?^[[H^[[2J

答案1

^[这是清除屏幕并将光标至少在类似 xterm 的终端中置于顶部的序列的视觉表示(其中表示 ESC 字符):

$ TERM=xterm tput clear | cat -v
^[[H^[[2J

要了解这些转义序列,请查看ctlseqs.txt文档随xterm.在那里,您会发现:

ESC [
控制序列引入器(CSI 为 0x9b)。

和:

CSI Ps; Ps H
光标位置 [行;列](默认 = [1,1])(CUP)。

和:

CSI Ps J 显示器擦除 (ED)。
Ps = 0 -> 擦除下方(默认)。
Ps = 1 -> 删除上面的内容。
Ps = 2 -> 全部删除。
Ps = 3 -> 删除已保存的行 (xterm)。

(请注意,这^[[2J不会清除已保存的行或备用屏幕)。

tput clear(或clear) 在xterm类似终端上的作用与 相同printf '\e[H\e[2J'。为此,它查询数据库以了解其名称存储在环境变量中的终端的功能terminfo的字符序列是什么。如果您使用 转储数据库中的终端条目,您将在其中看到:clear$TERMxtermterminfoinfocmp xterm

$ infocmp -1 xterm | grep clear
        clear=\E[H\E[2J,

这是了解给定转义序列的另一种方法:

$ infocmp -L -1 | grep J
        clear_screen=\E[H\E[2J,
        clr_eos=\E[J,

(此处使用L功能的 ong 名称)。然后,您可以man 5 terminfo对这些功能进行描述。

答案2

中的值nm默认为 1 CSIn;mH,因此^[[H将光标移动到起始位置。^[[2J清除屏幕,将光标保留在原来的位置。

相关内容