清空终端屏幕(实际效果)

461

在终端上使用 clear 命令只是让用户误以为屏幕已经清空...当你使用鼠标滚动时,仍然可以看到之前命令的输出。当你被海量文本淹没时,这会使生活变得困难。

在互联网上可以找到各种解决方案(如转义代码等),但它们只是对 clear 命令已经执行的操作做了些变化。

那么,在 Linux 终端中如何真正地清除内容呢?


48
我会将此归类为“程序员常用的软件工具”(在FAQ中提到是有效的)。 - Sandeep Datta
5
你真正想问的是“如何清除终端的滚动缓冲区?”,这与Shell(Bash)或Ubuntu无关。 - Dennis Williamson
@spiderplant0 可能是因为 AskUbuntu 目前是这个问题的正确位置。在此之前,它并不存在,所以被关闭了,尽管事实并非如此。 - jcollum
1
这是一个更一般性的问题,不仅影响Ubuntu或bash,正如@Dennis所指出的那样。我会将主题“清除Ubuntu bash屏幕”更改为“真正清除终端屏幕”。 - Ra_
所有这些解决方案都无法在vim的:term中工作。 - user202729
显示剩余5条评论
12个回答

571

使用以下命令进行清屏,而不仅仅是添加新的行...

printf "\033c"

没错,那是在Bash提示符上使用的“printf”。

不过你可能想定义一个别名...

alias cls='printf "\033c"'

说明

\033 == \x1B == 27 == ESC

因此,这变成了<ESC>c,这是重置终端的VT100转义码。这里有更多关于终端转义码的信息。

编辑

以下是其他几种方法...

printf "\ec" #\e is ESC in bash
echo -en "\ec" #thanks @Jonathon Reinhart.
# -e    Enable interpretation of of backslash escapes
# -n    Do not output a new line

KDE

上面的命令在KDE终端(称为Konsole)上不起作用,但是有希望!使用以下命令序列清除屏幕和滚动缓冲区...

clear && echo -en "\e[3J"

或者在KDE上使用以下别名...

alias cls='clear && echo -en "\e[3J"'

我从这里得到了清除滚动条的命令。


4
这实际上是特定于终端的。"\033c"是"ESC c",对应于VT-XXX转义序列中的"完全重置(RIS)"。几乎所有人今天使用的终端都兼容VT,但如果你发现自己正在使用一个奇怪的终端,这可能不起作用。假设TERM设置正确,@vpit3833的答案更有可能起作用。 - Laurence Gonsalves
2
printf 是 Bash 的内置命令(虽然也是一个独立的二进制文件,但内置命令具有优先级,并且大多数现代 shell 都具有 printf)。 - Dennis Williamson
2
@SDX2000 好的...我知道你指定了Ubuntu,我假设这些在所有“现代”终端仿真器上的行为类似。我最初在我的MAC终端上进行了测试,但它在我的Centos Linux上重置了。 - nhed
2
几年后才0.02美元,但我是CU的学生。问了我的操作系统教授,他说这是ANSI转义序列的一个例子:https://en.wikipedia.org/wiki/ANSI_escape_code 这是带内信号传输的一个例子。 - abgordon
1
KDE的解决方案适用于xterm和支持xterm转义序列的终端。xterm转义序列的官方列表位于invisible-island.net/xterm/ctlseqs/ctlseqs.html。 (如果您想了解更多关于终端转义序列的信息,请参见ANSI转义序列)。 - anishpatel
显示剩余12条评论

240

尝试使用 reset 命令,它可以清除终端屏幕但之前的命令可以通过箭头或其他按键绑定来访问。


3
谢谢!但它会清除所有东西,包括提示。请看我的答案,它提供了一个不会这样做的解决方案。 - Sandeep Datta
5
@SDX2000 先清除提示符,然后Shell会生成一个新的提示符。reset 的一个缺点是它似乎有点慢(可能是因为它不仅仅只是发出 ESC c),但它更具可移植性。 - Laurence Gonsalves
1
@SDX2000 reset 对于终端出现严重混乱的情况非常有用,例如因为您杀掉某些东西(或查看二进制文件)而导致终端状态混乱。您是否曾经处于一个状态,即提示符出现但无法输入,当您按下回车键时,新的提示符出现在之前的提示符旁边而不是在下方?reset 可以解决这个问题。实际上,这是我唯一使用 reset 的场景... 我从来没有需要/愿望清除我的滚动缓冲区。 - Laurence Gonsalves
4
“重置”操作所伴随的1秒延迟对我来说无法忍受。 - Jonathon Reinhart
2
这应该是默认答案,我个人认为。打印魔数永远不是一个答案。 - daniels_pa
显示剩余5条评论

82
tput reset

那就行了!


4
比起简单的“reset”执行速度更快,但仍然能完成任务! - Ponkadoodle
2
比仅使用 reset 更快 - l2aelba
4
“reset”命令为什么会包含延迟?这是因为在终端窗口中,当终端处于某些状态时,通过发送reset命令来重置终端可以更快地将其恢复到正常状态。该延迟时间通常为几毫秒,足以确保reset命令被成功发送并执行。 - Unknown123

10

我在阅读过的所有答案都无法在PuTTY中工作,所以我在这篇文章上找到了一条评论:

在您连接的设置中,在“窗口→行为”下,您会发现一个设置“仅按ALT键时显示系统菜单”。然后使用 CTRL + LALTl (小写字母L)将滚动屏幕并清除滚动缓冲区。

(对OP有关联,因为我正在连接到Ubuntu服务器,但似乎与您的服务器运行的内容无关。)


1
@Dennis Williamson三年前的评论引导我得出了这个答案。 - TecBrat
另外,假设您在PuTTY的“窗口”设置中启用了“系统菜单显示在ALT-Space上”,则可以快速执行CTRL+L然后ALT+SpaceU,这将首先清除终端窗口,然后真正重置滚动条。 - Pierre Voisin

8
  1. Clean the visible screen

     clear 
    
  2. Clean screen and clear buffer

     clear && clear 
    
  3. Clean and 1-sec delay

     reset
    
  4. Clean without 1-sec delay

     tput reset
    

7
以下链接将解释如何使该别名永久化,这样您就不必一遍又一遍地输入它。

https://askubuntu.com/questions/17536/how-do-i-create-a-permanent-bash-alias

这些是该链接中详细的步骤:
  1. 使用vim ~/.bashrcgedit ~/.bashrc或您喜欢的任何文本编辑器
  2. 在文件底部添加alias cls='printf "\033c"'
  3. 保存并退出
  4. . ~/.bashrc(确保.~之间有一个空格)
  5. 现在检查是否一切正常!

我不对此信息负责,只是传递它。


\033c\x1bc是相同的,而\x1bc\u001bc也是相同的。这三个都可以使用! - Jake

7

我最喜欢的人性化命令是:

reset

在xterm和VT100上进行了测试。它还可以在程序意外终止后帮助恢复。 保留命令缓冲区,因此向上箭头将循环显示以前的命令。


6
我知道使用打印新行的解决方案并不被广泛支持,但是如果其他方法都失败了,为什么不呢?特别是当你在一个环境中操作时,其他人可能能够看到屏幕,但无法记录按键。那么,一个潜在的解决方案如下所示:
alias c="printf '\r\n%.0s' {1..50}"

然后,为了“清除”屏幕上当前的内容(或者说是隐藏它们),只需要在终端中输入c+Enter

1
我的终端不知何故无法清除滚动历史记录,除了打印一堆换行符之外,这些解决方案都不起作用。我建议在最后添加一个清除操作,以便将光标重置回顶部。 - Maximilian Ballard
@MaximilianBallard 这是哪个TTY? - JWL
我使用“st”终端,但我不知道它是否是特定的终端本身,因为在我的另一台计算机上没有这个问题,而且我使用的是同一个终端。 - Maximilian Ballard

5

特别说明一下,tmux的滚动缓冲区不能通过clearresetprintf来清除。你需要使用:clear-history命令。详情请参考链接


3

如果你使用KDE和Ubuntu 12.04 LTS以及“Konsole”终端,那么之前发布的答案都不适用。但是,按下默认键盘快捷键CTRL+Shift+X确实有效!来源:

https://bugs.kde.org/show_bug.cgi?id=288913


3
这在后来的KDE版本中已更改为CTRL+Shift+K:https://bugs.kde.org/show_bug.cgi?id=282593 - Optimized Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接