如何清除 Mac OS X 终端中以前的输出?

问题描述 投票:0回答:17

我知道

clear
命令可以“清除”当前屏幕,但它只是通过打印大量换行符来实现这一点 - 清除的内容只是向上滚动。

有没有办法完全擦除终端以前的所有输出,这样我即使向上滚动也无法到达它?

macos shell buffer
17个回答
1352
投票

手动清除终端:

+K

Command+K 适用于较新的键盘

从 shell 脚本中清除终端;

/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'

133
投票

从脚本中清除屏幕的更好方法...

如果您使用的是 OS X 终端应用程序(如 OP 所述),更好的方法(感谢 Chris Page 的回答How do I Reset the rollback in the Terminal via a shell command?)就是这个:

clear && printf '\e[3J'

或更简洁(向用户qiuyi提示):

printf '\33c\e[3J'

这会清除回滚缓冲区以及屏幕。还有其他选择。请参阅 Chris Page 对 如何通过 shell 命令重置终端中的回滚? 了解更多信息。

原答案

此线程中给出的 AppleScript 答案是有效的,但是它具有清除恰好处于活动状态的任何终端窗口的令人讨厌的副作用。如果您在一个窗口中运行脚本并尝试在另一个窗口中完成工作,这会令人惊讶!

您可以通过优化AppleScript以仅在屏幕位于最前面时清除屏幕来避免这种情况(取自MattiSG对如何通过shell命令在终端中重置回滚?的回答):

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

...但是当它不是当前窗口时,输出将堆积起来,直到再次成为当前窗口,这可能不是您想要的。


87
投票

仅删除最后一个输出:

+ L

要完全清除终端:

+ K


67
投票

漂亮的方式是

printf '\33c\e[3J'


37
投票

将其放入您的 .bash_profile.bashrc 文件中:

function cls {
    osascript -e 'tell application "System Events" to keystroke "k" using command down'
}

22
投票

在 Mac OS X 终端上,此功能已作为菜单 ViewClear Scrollback 内置于终端应用程序中(默认为 CMD + K)。

因此,您可以根据需要使用 Apple 键盘快捷键重新分配此值。只需使用命令“Clear Scrollback”为终端添加一个新的快捷方式即可。 (我使用 CMD + L,因为它类似于 Ctrl + L 来清除当前屏幕内容,而不清除缓冲区。)

我不确定你会如何在脚本中使用它(也许是AppleScript,正如其他人指出的那样)。


11
投票

对于 Mac OS X v10.10 (Yosemite),使用 Option + Command + K 清除 Terminal.app 中的回滚。


9
投票

或者您可以通过按 Ctrl + L 发送分页符(ASCII 换页符)。

虽然从技术上讲这只是开始一个新页面,但这与所有其他方法具有相同的最终效果,同时速度要快得多(当然,Apple + K 解决方案除外)。

因为这是一个 ASCII 控制命令,并且它适用于所有 shell。


9
投票

Command + K 将清除以前的输出。

要清除输入的文本,请先使用 Command + A 向左跳转,然后使用 Control + K 清除指针右侧的文本。

视觉示例:


6
投票
clear && printf '\e[3J'

清除所有内容,并且在 OS X 上也能正常运行。非常整洁。


6
投票

做正确的事;把事情做好!

清除到上一个标记:Command + L

清除上一个书签:Option + Command + L

清除开始:Command + K


3
投票

将以下内容添加到您的配置文件中将为您提供一个新命令来执行此操作。

alias clearwipe='printf "\33c\e[3J"'

重新加载后

clearwipe
将是一个新命令,用于完全擦除终端之前的所有输出,这样即使向上滚动也无法到达它。


0
投票

我无法获得之前的任何答案(在 macOS 上)。

一个组合对我有用 -

IO.write "\e[H\e[2J\e[3J"

这会清除缓冲区和屏幕。


0
投票

✅ 现在我正在使用:

  1. printf'c [3J'
  2. bash$ 👉历史-c
  3. zsh%👉历史-p

-2
投票

这适用于 MacOS v13

tput reset

-3
投票

在终端中输入以下内容将擦除您的历史记录(意味着使用向上箭头不会给您带来任何好处),但它不会清除屏幕:

history -c

-3
投票

CMD + K 适用于 macOS。它清除整个终端输出,但环境仍然存在。

© www.soinside.com 2019 - 2024. All rights reserved.