11

With Bash CtrlL will clear the screen but not scrollback buffer. In the past I have worked around this by using:

tput reset

However I have noticed that this command will not clear the scrollback buffer with Zsh. So, how is it done?

  • It's remotely possible that there's a bash alias for tput (though the bash style tends to be hard-coded escape sequences). Perhaps the TERM (and corresponding reset differ: some use the hard-reset, some don't). – Thomas Dickey May 03 '19 at 23:13
  • Works for me, but this depends on the terminal. Which terminal emulator are you using? Do you have the same problem in other terminal emulators? Are you using an interface such as screen or tmux? Do you, at any point (e.g. in your zsh configuration, or in your .profile, or in your terminal configuration, or anywhere else), change the value of the TERM environment variable? – Gilles 'SO- stop being evil' May 04 '19 at 23:21
  • @Gilles I am just using stock Manjaro from here https://osdn.net/projects/manjaro/storage/xfce –  May 05 '19 at 00:28

2 Answers2

11
function clear-scrollback-buffer {
  # Behavior of clear: 
  # 1. clear scrollback if E3 cap is supported (terminal, platform specific)
  # 2. then clear visible screen
  # For some terminal 'e[3J' need to be sent explicitly to clear scrollback
  clear && printf '\e[3J'
  # .reset-prompt: bypass the zsh-syntax-highlighting wrapper
  # https://github.com/sorin-ionescu/prezto/issues/1026
  # https://github.com/zsh-users/zsh-autosuggestions/issues/107#issuecomment-183824034
  # -R: redisplay the prompt to avoid old prompts being eaten up
  # https://github.com/Powerlevel9k/powerlevel9k/pull/1176#discussion_r299303453
  zle && zle .reset-prompt && zle -R
}

zle -N clear-scrollback-buffer
bindkey '^L' clear-scrollback-buffer

clear and zle .reset-prompt && zle -R are added to make sure it works for multiline prompts, which is important.

References

Simba
  • 1,682
2
  • Cmd-K
  • Menus / Edit / Clear to Start
AdminBee
  • 22,803