如何真正清除终端?


384

我可以发出clear命令或按Ctrl+ L清除当前的Ubuntu终端,但这只是将先前的输出向上移动,如果您使用鼠标滚动或PgUPPgDown键,则很难区分先前命令的输出结束和当前命令的输出开始。

有没有一种方法可以真正清除终端,所以我看不到先前的命令结果?


11
两次按Ctrl + L ,您将变成空白!
潘迪2014年

Answers:


455

是的,您要查找的命令是

reset

与此相反clear,或Ctrl+ Lreset实际上将完全重新初始化的终端,而不是只清除屏幕。但是,它不会重新实例化外壳(bash)。这意味着bash的状态与以前相同,就像您只是清除屏幕一样。

正如@Wallacoloo在评论中提到的那样,此命令应该可以更快地完成相同的操作:

tput reset

从其他答案:

  • 您可以将一组键盘快捷键,以reset终端,如通过解释towolf

  • 如果您正在运行Kubuntu,并且您的终端是Konsole,那么您需要转到编辑→清除历史记录,因为reset此处的工作方式与UncleZeiv所述不同


9
对于大多数用户而言,可能无关紧要,但是的行为reset取决于终端。
cthom06 2011年

2
就我个人而言,我不介意在我点击时滚动条上会残留一些东西^L。我没有看到它(这就是我想要的!),我没有感觉,如果突然之间,我将需要恢复那里的东西-没问题。reset相比之下,它要难得多,我会在终端出现问题时使用它,例如奇怪的转义序列意外完全破坏了显示屏。
ulidtko 2011年

14
@ulidtko:当您连续运行具有大量输出的程序时,这很重要。如果向后滚动,很容易混淆哪个执行打印了某些内容。我非常清楚,在这些情况下可以使用更复杂的解决方案,但是尽管如此,这种情况经常发生在快速而肮脏的调试会话中。
UncleZeiv 2011年

7
tput reset显然,它也可以做同样的事情,但是reset可以立即完成(而重新显示提示可能要花费大约2秒钟的时间)。
Ponkadoodle

1
这将导致我的putty.exe窗口调整大小,如果没有这种情况,将很容易清除。
void.pointer '17

99

我寻找了一段时间,发现了一些天才将其发布:

clear && printf '\e[3J'

清除整个屏幕缓冲区,非常干净。可以在OS X上运行,并且相信它在大多数* nix终端上都可以正常工作。

出于好奇,这部分'\e[3J'是终端转义命令。


2
嗯,可以在xterm,Konsole和Linux VT中使用,但不能在gnome终端中使用……
Ruslan 2014年

1
谢谢,在Mac上效果很好-我真的很想念真正的Bash风格reset
JohnnyCoder

9
谢谢,这非常有用!什么printf '\e[3J'意思 如何清洁缓冲区?
Filip Spiridonov

4
注意别名reset-它不只是清除终端。例如,如果您不小心打印了一个带有随机垃圾的二进制文件,该垃圾破坏了终端(例如,禁用了键入字符的回显),reset通常可以解决该问题。当然,只要您知道如何\override使用别名阴影命令,就可以使用别名。
RubyTuesdayDONO

4
这是唯一通过绕线机访问SSH时清除Putty回滚的答案。
dhaupin

45

您还可以通过转到编辑→键盘快捷方式在gnome-terminal中分配快捷方式。我用Shift+ Ctrl+ Alt+ C

重置并清除快捷方式


+1。我总是隐藏菜单栏;因此,即使经过多年使用gnome,我也从未想过要寻找它。谢谢:-)
Stefano Palazzo

3
“重置”对我无济于事,“重置并清除”清除所有内容,但不重新显示提示。这些菜单项都不像终端上的“ reset”命令那样。
Hibou57

正如@ Hibou57所说,我的“重置”键盘快捷键似乎没有任何作用。该功能在14.04中被破坏了吗?
2014年

“此功能在14.04中被破坏了吗?”:与12.04相同。
Hibou57

1
@ Hibou57“重置并清除”预计不会重新显示提示,但是如果您随后按Enter,它将重新显示提示。那对你有用吗?
唐·哈奇

19

stackoverflow交叉发布我的答案。

使用以下命令可以清晰显示屏幕,而不仅仅是添加新行...

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"'

我从这里得到了回滚清除命令。


18

运行以下命令:

reset

这与启动新终端具有相同的效果。


6
使用腻子时,运行后reset,我仍然可以向上滚动并查看以前的内容。这是PuTTY的问题而不是问题reset吗?
Svish

@svish-这仅仅是油灰实施的问题或决定。
belacqua

@jgbelacqua,交易:)
Svish

与MAC OS Terminal一起工作
Bira

2
@Bira不,reset不会清除macOS 10.14 Mojave上的回滚。您可以尝试seq 100; reset查看仍在回滚。在macOS终端上,Cmd+K可以清除屏幕和向后滚动。
Johnny Wong

8

我最喜欢的是printf "\ec"。也可以是printf "\033c"printf "\x1bc"。这是一个ansi转义序列,可以奇迹般地清除终端输出的屏幕和缓冲区(对于我在其中工作过的大多数标准终端来说,我似乎都知道-我知道它可以在类似Ubuntu的gnome-terminal,terminator,xterm等中运行) Linux)

我知道这可以在Linux Mint和Ubuntu 14.04中使用,所以我不知道为什么人们会添加和添加诸如之类的东西clear && echo -ne "\033cprintf "\ec"一直为我工作。

另外,在我中,.bashrc我有一个像这样的绑定:

bind -x '"\C-t": printf "\ec"';

现在我一直按ctrlt


您知道如何使用Windows键创建映射吗?这个片段非常棒,与Mac上的Command-K完全一样。谢谢。
Niloct

@Niloct,您可以查看终端是否支持xev(只需xev在x会话中键入终端)。据我所知,urxvt不支持它。虽然我没有尝试过tty,但我相信它不会得到支持。我也怀疑xterm或gnome-terminal是否会支持这一点。使用ansi换码很棘手。欢呼声和对不起您的延迟回复。
dylnmc '17

好吧@dylnmc,我很感激。感谢您的评论。
Niloct

5

好吧,这实际上取决于您是否正在使用Konsole,甚至reset不阻止您滚动到第一行。在这种情况下,您必须使用正在使用的特定终端的某些功能。因为Konsole,是Edit > Clear History


3

我发现以下在Kubuntu方面相当成功:

alias clc="echo -en '\033c\033[3J'"

您可以使用clsWindows传统,使用Matlab版本clc,也可以使用自己的版本。祝好运!



2

@ Hibou57答案的另一种替代方法:

# The Octal Way
alias clear="echo -e '\033c\c'"

要么

# The Hex Way
alias clear="echo -e '\x1b\c'"

基本上,这将具有完全相同的效果,它将打印^[字符(这将清除终端),并且不输出尾随的新行。


小幅回调:它打印的^[字符(ESC) ,随后c人物,不只是^[单纯的性格。这些总和等于“ RIS”终端代码,将导致复位。更多信息:xfree86.org/4.8.0/ctlseqs.html
jwd

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.