I know the clear
command that 'clears' the current screen, but it does this just by printing lots of newlines - the cleared contents just get scrolled up.
Is there a way to completely wipe all previous output from the terminal so that I can't reach it even by scrolling up?
Command+K
.
To clear the terminal manually:
⌘+K
Command+K for newer keyboards
To clear the terminal from within a shell script;
/usr/bin/osascript -e 'tell application "System Events" to tell process "Terminal" to keystroke "k" using command down'
A better way to clear the screen from within a script...
If you're using the OS X Terminal app (as stated by the OP), a better approach (thanks to Chris Page's answer to How do I reset the scrollback in the terminal via a shell command?) is just this:
clear && printf '\e[3J'
or more concisely (hat tip to user qiuyi):
printf '\33c\e[3J'
which clears the scrollback buffer as well as the screen. There are other options as well. See Chris Page's answer to How do I reset the scrollback in the terminal via a shell command? for more information.
Original answer
The AppleScript answer given in this thread works, but it has the nasty side effect of clearing any terminal window that happens to be active. This is surprising if you're running the script in one window and trying to get work done in another!
You avoid this by refining the AppleScript to only clear the screen if it is frontmost by doing this (taken from MattiSG's answer to 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'
... but as when it's not the current window, the output will stack up until it becomes current again, which probably isn't what you want.
.bash_profile
and it's awesome because I no longer get the glitched buffer sometimes when opening a new terminal window.
ctrl+l
, to do the same thing as printf '\33c\e[3J'
using .inputrc
?
.inputrc
but this worked in my .bash_profile
: bind '"\C-k": "printf \\\\33c\\\\e[3;\n"'
printf
code works in the normal terminal app, but not in the built-in terminal of PHPStorm. Anyone knows why?
The pretty way is printf '\33c\e[3J'
alias cls='printf "\33c\e[3J"'
\33c
performs the equivalent of the clear
command, which basically just scrolls the screen until you can't see it's previous contents. It clears the screen, but not the scroll back buffer (i.e. you can still use the scroll bars to see the old output). Add the \e[3J
to actually clear the scroll back buffer.
function cls { printf '\33c\e[3J\33c' }
line in ~/.profile
(or system-wide /etc/profile
). This should work for desktop environments in macOS, FreeBSD, Linux etc. Note the extra \33c
is for clearing the extra \e[3J
literal in non-macOS (basically for Linux/FreeBSD, we only need printf '\33c'
).
To delete the last output only:
⌘ + L
To clear the terminal completely:
⌘ + K
clear -x
keeps scrollback intact, don't have a mac at hand to test there
Put this in your .bash_profile or .bashrc file:
function cls {
osascript -e 'tell application "System Events" to keystroke "k" using command down'
}
On Mac OS X Terminal, this functionality is already built in to the Terminal Application as menu View → Clear Scrollback (the default is CMD + K).
So you can re-assign this as you like with Apple's Keyboard shortcuts. Just add a new shortcut for Terminal with the command "Clear Scrollback". (I use CMD + L, because it's similar to Ctrl + L to clear the current screen contents, without clearing the buffer.)
I am not sure how you would use this in a script (maybe AppleScript as others have pointed out).
View->Clear Scrollback
is no longer present in Terminal's menu. The keyboard shortcut CMD
+ K
still works, though.
Clear Scrollback
has just moved from View
to Edit
in Yosemite.
Or you can send a page break (ASCII form feed) by pressing Ctrl + L.
While this technically just starts a new page, this has the same net effect as all the other methods, while being a lot faster (except for the Apple + K solution, of course).
And because this is an ASCII control command, and it works in all shells.
Command + K will clear previous output.
To clear entered text, first jump left with Command + A and then clear the text to the right of the pointer with Control + K.
Visual examples:
https://i.stack.imgur.com/ON6Vx.png
Do the right thing; do the thing right!
Clear to previous mark: Command + L
Clear to previous bookmark: Option + Command + L
Clear to start: Command + K
clear && printf '\e[3J'
clears out everything, and it works well on OS X as well. Very neat.
clear
which leaves some stuff when you scroll back up. no more!
I couldn't get any of the previous answers to work (on macOS).
A combination worked for me -
IO.write "\e[H\e[2J\e[3J"
This clears the buffer and the screen.
IO.write
. It should work the same however you decide to print those characters to the terminal.
Typing the following in the terminal will erase your history (meaning using up arrow will get you nothing), but it will not clear the screen:
history -c
CMD + K works for macOS. It clears the entire terminal output, but the environment remains.
Success story sharing
clear
for all cases except where you need the scrollback history to actually disappear, e.g. when you are going to print.)clear
. I feel like they should be reversed, though. Typingclear
seems more intentional than hittingCommand + K
.