何必?
清除回滚缓冲区在很多方面都很方便,例如,当我希望运行一些输出较长的命令,并希望快速滚动到此输出的开头时。清除回滚缓冲区后,我可以滚动到顶部,然后就完成了。
一些考虑:
根据人类的说法,有clear
命令,
如果可能, clear清除屏幕,包括它的回滚缓冲区(如果定义了扩展的“E3”功能)。
在 gnome-terminalclear
中不清除回滚缓冲区。(不过,什么是“E3”功能?)
还有reset
, 它清除了,但它的作用远不止于此,而且它真的很慢(在我的系统上它需要超过一秒钟,这对于人类来说是明显的延迟)。
还有echo -ne '\ec'
or echo -ne '\033c'
,它可以完成这项工作。并且确实比reset
.
问题是,什么是\ec
序列,它与什么clear
和reset
做什么有什么不同,为什么没有单独的命令呢?
还有 readline 的C-l
键序列,默认绑定到clear-screen
命令(我的意思是,readline 命令,而不是 shell 命令)。这个命令是什么?它发出哪个转义序列?它实际上是如何工作的?它运行shell命令吗?或者是什么?同样,在 gnome-terminal 中,它似乎只是通过吐出空白行直到提示出现在终端的顶行。不确定其他终端仿真器。这是非常麻烦的行为。它用大块的空虚污染回滚,所以你必须向上滚动更多,更多。这就像一个 hack,而不是干净的解决方案。
另一个问题是,是否有针对上述\ec
序列的 readline 命令?我想将它绑定到,C-l
因为我总是想在清除屏幕时清除回滚缓冲区。
另一个问题是如何在终端中输入这样的转义序列来执行所需的操作?然后不必考虑绑定C-l
到另一个 readline 命令(如果存在这样的命令)。我试着打字Esc
,然后c
,但这不起作用。
更新 这个问题主要在这里回答:https ://unix.stackexchange.com/a/375784/257159 。这是一个很好的答案,几乎可以解释这里提出的所有问题。
从
man bash
's readline 部分:所以按 control + alt + L
许多终端仿真器使用与XTerm相同或类似的转义序列。对于 XTerm,Escc定义为“完全复位 (RIS)”。完全重置会清除回滚缓冲区似乎是合理的。
readline
我使用绑定到序列本身没有成功,但一种解决方法是这有一些警告。首先,它将
printf
命令放入您的 shell 历史记录中,这并不理想。二是不能边输入命令边使用;它覆盖当前输入行。这对我有用:
(来自
clear
手册页)这是我发现的最好的清除终端和历史/回滚的方法