I have been using Ctrl-L to clear the screen in BASH, but for some reason it stopped working. Now when I hit Ctrl-L, a new line is created instead of clearing the screen. May be the issue is due to my recent update of BASH (from version 3.1 to version 4.3, to fix the Shellshock vulnerability). But you know what, I find it really difficult to work in a clumsy shell, so I need to get back Ctrl-L to clear the screen. I just googled around and found the below solution.
Ctrl-L should be bound to clear the screen and it can be achieved using ‘bind‘ command in Linux. Check if Ctrl-L is bound to clear the screen using the below command.
$ bind -P
The above command will display all the keys that bound with various functionalities. The sample output is below:
abort can be found on "\C-g", "\C-x\C-g", "\e\C-g". accept-line can be found on "\C-j", "\C-m". alias-expand-line is not bound to any keys arrow-key-prefix is not bound to any keys backward-byte is not bound to any keys backward-char can be found on "\C-b", "\eOD", "\e[D". backward-delete-char can be found on "\C-h", "\C-?". backward-kill-line can be found on "\C-x\C-?". backward-kill-word can be found on "\e\C-h", "\e\C-?". backward-word can be found on "\e[1;5D", "\e[5D", "\eb". beginning-of-history can be found on "\e<", "\e[5~". beginning-of-line can be found on "\C-a", "\eOH", "\e[1~", "\e[H". call-last-kbd-macro can be found on "\C-xe". capitalize-word can be found on "\ec". character-search can be found on "\C-]". character-search-backward can be found on "\e\C-]". clear-screen can be found on "\C-l". complete can be found on "\C-i", "\e\e". complete-command can be found on "\e!". complete-filename can be found on "\e/". complete-hostname can be found on "\e@". complete-into-braces can be found on "\e{". complete-username can be found on "\e~". complete-variable can be found on "\e$". copy-backward-word is not bound to any keys copy-forward-word is not bound to any keys copy-region-as-kill is not bound to any keys dabbrev-expand is not bound to any keys delete-char can be found on "\C-d", "\e[3~". delete-char-or-list is not bound to any keys delete-horizontal-space can be found on "\e\\". digit-argument can be found on "\e-", "\e0", "\e1", "\e2", "\e3", ... display-shell-version can be found on "\C-x\C-v". do-lowercase-version can be found on "\C-xA", "\C-xB", "\C-xC", "\C-xD", "\C-xE", .. downcase-word can be found on "\el". dump-functions is not bound to any keys dump-macros is not bound to any keys dump-variables is not bound to any keys dynamic-complete-history can be found on "\e\C-i". edit-and-execute-command can be found on "\C-x\C-e". emacs-editing-mode is not bound to any keys end-kbd-macro can be found on "\C-x)". end-of-history can be found on "\e>", "\e[6~". end-of-line can be found on "\C-e", "\eOF", "\e[4~", "\e[8~", "\e[F". exchange-point-and-mark can be found on "\C-x\C-x". forward-backward-delete-char is not bound to any keys forward-byte is not bound to any keys forward-char can be found on "\C-f", "\eOC", "\e[C". forward-search-history can be found on "\C-s". forward-word can be found on "\e[1;5C", "\e[5C", "\ef". glob-complete-word can be found on "\eg". glob-expand-word can be found on "\C-x*". glob-list-expansions can be found on "\C-xg". history-and-alias-expand-line is not bound to any keys history-expand-line can be found on "\e^". history-search-backward is not bound to any keys history-search-forward is not bound to any keys history-substring-search-backward is not bound to any keys history-substring-search-forward is not bound to any keys insert-comment can be found on "\e#". insert-completions can be found on "\e*". insert-last-argument can be found on "\e.", "\e_". kill-line can be found on "\C-k". kill-region is not bound to any keys kill-whole-line is not bound to any keys kill-word can be found on "\ed". magic-space is not bound to any keys menu-complete is not bound to any keys menu-complete-backward is not bound to any keys next-history can be found on "\C-n", "\eOB", "\e[B". non-incremental-forward-search-history can be found on "\en". non-incremental-forward-search-history-again is not bound to any keys non-incremental-reverse-search-history can be found on "\ep". non-incremental-reverse-search-history-again is not bound to any keys old-menu-complete is not bound to any keys operate-and-get-next can be found on "\C-o". overwrite-mode is not bound to any keys possible-command-completions can be found on "\C-x!". possible-completions can be found on "\e=", "\e?". possible-filename-completions can be found on "\C-x/". possible-hostname-completions can be found on "\C-x@". possible-username-completions can be found on "\C-x~". possible-variable-completions can be found on "\C-x$". previous-history can be found on "\C-p", "\eOA", "\e[A". print-last-kbd-macro is not bound to any keys quoted-insert can be found on "\C-q", "\C-v", "\e[2~". redraw-current-line is not bound to any keys re-read-init-file can be found on "\C-x\C-r". reverse-search-history can be found on "\C-r". revert-line can be found on "\e\C-r", "\er". self-insert can be found on " ", "!", "\"", "#", "$", ... set-mark can be found on "\C-@", "\e ". shell-backward-kill-word is not bound to any keys shell-backward-word is not bound to any keys shell-expand-line can be found on "\e\C-e". shell-forward-word is not bound to any keys shell-kill-word is not bound to any keys skip-csi-sequence is not bound to any keys start-kbd-macro can be found on "\C-x(". tab-insert is not bound to any keys tilde-expand can be found on "\e&". transpose-chars can be found on "\C-t". transpose-words can be found on "\et". tty-status is not bound to any keys undo can be found on "\C-x\C-u", "\C-_". universal-argument is not bound to any keys unix-filename-rubout is not bound to any keys unix-line-discard can be found on "\C-u". unix-word-rubout can be found on "\C-w". upcase-word can be found on "\eu". vi-append-eol is not bound to any keys vi-append-mode is not bound to any keys vi-arg-digit is not bound to any keys vi-back-to-indent is not bound to any keys vi-backward-bigword is not bound to any keys vi-backward-word is not bound to any keys vi-bword is not bound to any keys vi-bWord is not bound to any keys vi-change-case is not bound to any keys vi-change-char is not bound to any keys vi-change-to is not bound to any keys vi-char-search is not bound to any keys vi-column is not bound to any keys vi-complete is not bound to any keys vi-delete is not bound to any keys vi-delete-to is not bound to any keys vi-editing-mode is not bound to any keys vi-end-bigword is not bound to any keys vi-end-word is not bound to any keys vi-eof-maybe is not bound to any keys vi-eword is not bound to any keys vi-eWord is not bound to any keys vi-fetch-history is not bound to any keys vi-first-print is not bound to any keys vi-forward-bigword is not bound to any keys vi-forward-word is not bound to any keys vi-fword is not bound to any keys vi-fWord is not bound to any keys vi-goto-mark is not bound to any keys vi-insert-beg is not bound to any keys vi-insertion-mode is not bound to any keys vi-match is not bound to any keys vi-movement-mode is not bound to any keys vi-next-word is not bound to any keys vi-overstrike is not bound to any keys vi-overstrike-delete is not bound to any keys vi-prev-word is not bound to any keys vi-put is not bound to any keys vi-redo is not bound to any keys vi-replace is not bound to any keys vi-rubout is not bound to any keys vi-search is not bound to any keys vi-search-again is not bound to any keys vi-set-mark is not bound to any keys vi-subst is not bound to any keys vi-tilde-expand is not bound to any keys vi-yank-arg is not bound to any keys vi-yank-to is not bound to any keys yank can be found on "\C-y". yank-last-arg can be found on "\e.", "\e_". yank-nth-arg can be found on "\e\C-y". yank-pop can be found on "\ey".
Well, our aim is to check bound key for clear-screen isn’t? So just grep the output of “bind -p”
$ bind -P | grep clear clear-screen is not bound to any keys
The above output clearly says that there are no keys bound to clear the screen. So let’s create one using the below command.
$ bind -x '"\C-l": clear;'
Note: Lookout for the syntax. We have double quoted “\C-l“ and single quoted ‘“\C-l”: clear;‘
After executing the above command, hit Ctrl-L to see the blank screen.
Bound keys globally
Wait, you just executed the bind command in shell and it stays alive until you exit. To make it available for every new session, you need to add a line in /etc/inputrc
$ vi /etc/inputrc
Add below line at the end of the file.
"\C-l": clear-screen
That’s it. Now hitting Ctrl-L will clear the screen and it will work for every new session.
What if you want Ctrl-L to do more than just clear? Say list files.
bind -x '"\C-l": clear; ls'
After the above command is executed, hitting Ctrl-L will clear the screen and list files in the current directory.
Checkout ‘man bind‘ for more information.
this made my day