Is there any way to exit "less" without clearing the screen?
This is actually a function of the terminal emulator you are using (xterm, gnome-terminal, konsole, screen). An alternate screen, or altscreen, gets launched when programs such as less
or vim
are invoked. This altscreen has no history buffer and exits immediately when you quit the program, switching back to the original screen which restores the previous window content history and placement.
You can prevent less
from launch in an altscreen by passing the argument "-X".
less -X /path/to/some/file
You can also pass "-X" as an environment variable. So if you are using bash
, place this in ~/.bashrc
:
export LESS="-X"
However, this disbles the termcap (terminal capability) initialization and deinitialization, so other views when you use less
may appear off.
Another option would be to use screen
and set the option altscreen off
in your ~/.screenrc
. less
will not clear the screen and should preserve color formatting. Presumably tmux
will have the same option.
This blog entry describes the problem and offers some different solutions specific to gnome-terminal
with varying success.
The way I remember this is less -SEX
for when I need to dump output to the screen but don't want lines to wrap. For example docker ps | less -SEX
What that does is this:
-S
- Scroll instead of wrap
- If you drop the
-E
, you can use your arrow keys to scroll
-E
- Exit when you reach the EOF
-X
- Prevent term swapping/blanking
- The "memory" part is that I know what S and E does, so this must be the other part. (And our reason for committing this command to memory is that we want to dump (not enter an interactive session) unwrapped output.
If you can't remember less -SEX
, there's not a lot of hope for you. Just re-google every time I guess.
George's solution didn't work for me, but this solution did (from the blog entry linked in his answer).
$ infocmp -I xterm > ~/xterm-noclear.src
Edit ~/xterm-noclear.src
change the name on the second line from 'xterm' to 'xterm-noclear', or whatever suits you (also change 'xterm-debian' if it's present)
remove the instructions 'smcup' and 'rmcup' (e.g. "smcup=\E[?1049h, " and "rmcup=\E[?1049l, ")
$ mkdir ~/.terminfo
$ tic ~/xterm-noclear.src
(x/xterm-noclear should appear in your ~/.terminfo directory)$ export TERM=xterm-noclear
(now check the behaviour of less and, if satisfied, add the export directive line to your ~/.profile)
(I copied these instructions directly from @jah's rejected edit of George's answer.)