为啥clear命令清不掉滚动历史呢?因为它其实只是重绘了当前的视图区域,然后把光标移到了左上角而已。终端滚动缓冲区里的历史内容,可是被完整保留下来的哦,这是它本身的设计行为,可不是什么bug。它底层发送的是ANSI序列 33[2J 33[H,并不会去触碰缓冲区的。

clear 命令为什么没清掉滚动历史?
执行 clear 后,屏幕会变空。不过,只要一滚动鼠标滚轮,之前输出的内容就会全部回来。这可不是什么 bug,而是一种设计行为。clear 仅仅是将光标移动到顶部,并重新绘制当前视图区域,而终端缓冲区(scrollback buffer)里的内容是不会被改变的。
- 这是默认安全策略:避免误操作丢失调试信息
- 不同终端模拟器(GNOME Terminal、Konsole、tmux)对缓冲区的保留程度略有差异
- 若你真需要“物理清空”缓冲区,得用
printf " 33c"或reset,但后者会重置颜色、光标状态等,慎用
Ctrl + L 和 clear 有啥区别?
几乎没区别,Ctrl + L 就是 clear 的快捷键实现,底层发的 ANSI 序列相同(