我知道clear
命令可以“清除”当前屏幕,但它只是通过打印大量的换行来实现 - 被清除的内容只是被滚动了。
有没有一种方法可以完全清除终端中所有以前的输出,以至于即使向上滚动也无法访问它们?
⌘+K
对于新键盘,使用 Command+K
/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
clear
是一个在所有终端(OS X 的本地“Terminal”,X11 的 xterm,iTerm 等)中都有效的命令。因此,它查看环境变量 TERM
并输出一组适当的字符来清除终端。Command + K
仅在“Terminal”中有效。Terminal 还提供了许多清除终端部分的命令(Command + L
等)。 - Alok Singhalclear
根据TERM
变量执行操作,例如:TERM=xterm clear | hexdump
和TERM=tek clear | hexdump
。输出是不同的,因此clear
输出的字符显然取决于TERM
变量。 - Alok Singhal如果您正在使用OS X终端应用程序(如OP所述),一种更好的方法(感谢Chris Page对《如何通过shell命令重置终端滚动控件》的回答)如下所示:
clear && printf '\e[3J'
或者 (参考):
printf '\33c\e[3J'
这个命令不仅可以清空终端屏幕,还可以清空回滚缓冲区。此外,还有其他选项可供选择。详情请参见Chris Page在"How do I reset the scrollback in the terminal via a shell command?"一文中的回答。
本主题中给出的AppleScript答案有效,但它会产生一个讨厌的副作用:清除任何活动的终端窗口。如果您在一个窗口运行脚本并尝试在另一个窗口中完成工作,则会对此感到惊讶!
通过调整AppleScript,您可以避免这种情况发生,只需清除最前面的屏幕即可(取自MattiSG在"How do I reset the scrollback in the terminal via a shell command?"一文中的回答):
osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'
...但是当它不是当前窗口时,输出将会堆积直到再次成为当前窗口,这可能不是您想要的。
.bash_profile
中使用了“更好的方法”,这很棒,因为我再也不会在打开新的终端窗口时遇到缓冲区故障了。 - Patrick Roberts.inputrc
,但是在我的.bash_profile
中,这样做可以解决问题:bind '"\C-k": "printf \\\\33c\\\\e[3;\n"'
。 - kortinaclear && printf '\e[3J'
。正如(可能有点间接)指出的那样,printf '\33c\e[3J'
改进来自另一个答案,并且在此处重复编辑。所以我们有了一个答案和一个改进,它们被重复回到原始状态;每个人都可以得到赞! - ruffin⌘ + L
⌘ + K
clear -x
可以保留滚动记录,我手头没有Mac来测试。 - Andreas华丽的方式是 printf '\33c\e[3J'
alias cls='printf "\33c\e[3J"'
的别名。 - mpyw\33c
执行的相当于 clear
命令,它基本上只是将屏幕滚动到你无法看到其先前内容。它清除了屏幕,但不清除滚动缓冲区(即您仍然可以使用滚动条查看旧输出)。添加 \e[3J
以实际清除滚动缓冲区。 - luiss~/.profile
(或系统范围的/etc/profile
)中添加function cls { printf '\33c\e[3J\33c' }
行。这应该适用于macOS、FreeBSD、Linux等桌面环境。请注意,额外的\33c
是为了清除非macOS中的额外\e[3J
文字(基本上对于Linux / FreeBSD,我们只需要printf '\33c'
)。 - vulcan raven\33c
这段代码的含义是什么?在 MacOS 上是否有官方文档列出类似代码的完整含义列表? - Richardfunction cls {
osascript -e 'tell application "System Events" to keystroke "k" using command down'
}
CMD
+K
仍然可以使用。 - Nicolas Miari清除滚动缓存
刚从查看View
转移到了编辑Edit
。 - BrainSteelclear=\E[H\E[2J
,它将光标移动到起始位置(ESC [ H),并擦除显示(ESC [ 2 J)。这就是在编程时重要性使用 clear
命令而不是硬编码整个序列的原因。 - Chris Pageclear && printf '\e[3J'
clear
命令,但是当你向上滚动时会留下一些东西。现在不会再有这个问题了! - Pascal Belloncle
Command+K
很满意。 - eonil