我gnome-terminal
习惯于输入clear
或ctrl+L
清除终端,但我仍然可以向后滚动查看全部先前的输出。在 上konsole - KDE
,运行该clear
命令会删除屏幕上的输出。我仍然可以向后滚动,但前一个屏幕的内容已被删除。我只需要移动输出而不是删除它。
答案1
你已经不知不觉地习惯了以下的语义纸终端而不是视频终端。
在旧的纸张终端上,有一个换页控制字符,它会导致(通常是连续的、扇形折叠的)纸张卷起到下一张纸/表格的开头,并且旧行将挂在一长串纸张上位于终端机背面。
在 20 世纪 60 年代、1970 年代和 80 年代的视频终端上,有一个固定尺寸的屏幕,可以被抹去,同时明确地将光标移回起始位置。通常是换页控制字符没有做这个。它就像一个换行符,并且会有一个不同的擦除显示控制序列来擦除屏幕(参见擦除显示和换页在 DEC VT 系列视频终端上)。
PRINT CHR$(12)
在这方面,视频终端与某些当代家用计算机不同。而且您的Control+L实际上与输出换页字符分离。它是 shell 命令行编辑库(ZLE、GNU Readline 或 editline)中的绑定,实际上最终会发出擦除显示控制序列,就像通过tput clear
.
一些终端仿真器已经改变了视频终端范例,有效地重新引入旧的纸质终端语义,将卷起的东西挂在终端顶部。当模拟视频终端滚动时,滚动的内容被推入回滚缓冲区,并且擦除显示(通常)仅擦除回滚缓冲区底部下方的部分。
一些 GUI 终端仿真器采用了这种回到旧的纸质终端语义的想法。 GNOME 终端就是其中之一。它不会像视频终端那样擦除屏幕根本不, 现在。要求它擦除显示,它会执行换页操作,将所有内容推入回滚缓冲区。 (不,这不是正确的做法;显然。)
您已经习惯了 GNOME 终端的处理方式。请注意,这些都是非常古老的纸终端语义,而不是(不太旧的)视频终端语义。您不会通过其他更符合后者的终端模拟器(例如 Konsole)获得它们。
对于其他终端模拟器,您必须将它们视为视频终端而不是纸质终端。擦除显示不是错误的换页,换页也不会送入一堆伪纸张。你需要:
- Control将+L与其当前绑定(在 ZLE 和 GNU Readline 中命名)解除绑定
clear-screen
,这会擦除显示,然后重新显示命令行编辑器。 - 将Control+绑定L到不同的小部件向上滚动视频终端 然后重新显示命令行编辑器。笔记:
- 可能没有为此提供方便的预先提供的小部件。你必须做一个,或者找到一个已经做好的。 terminfo 功能名称是
indn
termcapSF
中的 , 。 - 要发出的控制序列是标准的向上滚动控制序列,而不是擦除显示控制序列。 Konsole 了解向上滚动控制序列。
- 但是,在 DEC VT525 等正版视频终端上向上滚动被实现为窗台而不是一个卷轴。 (525 在 Windows 中显示多个终端会话。)因此不要指望这能在某些真正的视频终端上工作。
- 可能没有为此提供方便的预先提供的小部件。你必须做一个,或者找到一个已经做好的。 terminfo 功能名称是