My question is simple, but I am finding it hard to frame/explain it easily.

I log into several Unix boxes with different accounts. I see 2 different things for user1 and user2, while editing text files in vim


When I type vim filename, vim opens and I edit the file. When I close it, the complete text from the file is gone , and I see the Teminals' command/output that was previously present.


When I type vim filename, vim opens and I edit the file. When I close it, the part of file that was present on the display while I was in vim still shows up at the display, and all the previous Terminal display get's scrolled up. Even if the file was just 1 line, after exiting vim, the display shows the first line, with rest all the ~ and I see the command prompt at the bottom of screen.


$ bash --version
GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.
$ vim --version
VIM - Vi IMproved 7.0 (2006 May 7, compiled Jun 12 2009 07:08:36)

I compared the vimrc files for both users, and I am aware of all the settings, and don't find any setting/config related to this behavior.

Is this behavior related to shell config ? How do I set the things, so that I get the behavior as shown in user1 scenario?

I am not able to describe this easily, also finding it hard to google, as I don't to know what keyword to look for such behavior. Let me know, If I should elaborate further.

  • Are user1 and user2 accounts on the same or different machines?
    – jasonwryan
    Commented Jan 7, 2013 at 8:03
  • @jasonwryan Logging on same machine too shows same scenario. @ warl0ck Thanks for that.
    – mtk
    Commented Jan 7, 2013 at 8:19
  • 1
    If you wanted to force this behaviour but retain your terminal type, add a line to your .bashrc or .profile saying alias vi ="/usr/bin/vi $* ; clear"
    – Criggie
    Commented Nov 10, 2016 at 6:27

4 Answers 4


One of the reasons for that behaviour will be the setting of the terminal for each user.

For example:

  • User1 is using TERM=xterm, in this case when you exit vim it will clear the terminal.
  • User2 is using TERM=vt100, in this case when you exit vim it will not clear the terminal.

Check what terminal user1 is using with echo $TERM and set the same for user2. for bash:

TERM=xterm; export TERM

  • 1
    +1 Exact/perfect solution. Thanks !!! Didn't thought it was that easy. Can you please elaborate on what a TERM is? or point to some resource link? I need to understand this. Does this affect only when we connect via putty?
    – mtk
    Commented Jan 7, 2013 at 8:31
  • You can specify the terminal setting into the putty session, but users can have it specify on their environment variables. TERM will define your terminal type and also some will have more features that other, example, xterm supports colors and it will update the rows and columns automatically. If you use vt100, it will default to 24 rows by 80 columns when you resize your terminal you will see that it sticks to 24x80. Check this unix.stackexchange.com/questions/43945/…, it might explain better than me.
    – BitsOfNix
    Commented Jan 7, 2013 at 9:01
  • It's the terminal behaviour, not the shell. The terminal emulator settings are the same whatever tool you use to connect. The difference is explained in details here: unix.stackexchange.com/questions/4126/…
    – Leonid
    Commented Jan 7, 2013 at 9:01
  • @Leonid, not exactly, if you use putty you can define and it will update when connecting if the user does not a TERM define. If the user has it defined then you are right, not matter what tool it will prevail the setting on the user environment.
    – BitsOfNix
    Commented Jan 7, 2013 at 9:04
  • 1
    Just a note about this solution: YMMV. It's not always "xterm". Using dwm (Dynamic Window Manager) with dmenu on FreeBSD 10 I had to fake the terminal by using "rxvt" to get scenario 1. You can also skip the term setting by adding "set term=rxvt" to your ~/.vimrc file.
    – Ryder
    Commented Mar 4, 2015 at 10:12

Such behavior was the only thing that kept me away from using screen. It uses "screen" terminal and changing it to "xterm" didn't help.

Adding altscreen on option in ~/.screenrc solved it. From screen's manual:

altscreen on|off

If set to on, "alternate screen" support is enabled in virtual terminals, just like in xterm. Initial setting is `off'.

  • @Fox OP doesn't mention anything about TERM he is using, so this can be just alternative answer. Anyway this page is on very top while googling for screen issue too. Commented Nov 10, 2016 at 7:16
  • 2
    This did the trick! Keywords: "vim quit leaves visual artifacts terminal"
    – Jay Taylor
    Commented Dec 21, 2017 at 17:53
  • Perfect. Works with nano, htop and etc. Why isn't this the default?
    – ctrlbrk
    Commented Jun 20, 2020 at 16:44
  • 1
    What a great answer! Thanks for helping the masses :)
    – hesham_EE
    Commented Jan 28, 2022 at 19:04

I have tried all these options but the result was not the one that I expected. !clear would clear the entire screen and does not leave behind the earlier bash commands.

Simple and correct solution is to set the terminal type string to xterm and terminal speeds to 38400,38400 under Terminal details in putty settings under Connection->Data.

Save the settings and you are good to go.

  • It breaks Home/End/PgUp/PgDn work properly in bash for me from Putty. However, all works properly if I set the "Terminal-type string" to "putty" instead of the default "xterm" in Putty's session configuration (Connection -> Data).
    – DShost
    Commented Sep 28, 2021 at 8:20

In my case, TERM was set equally on both machines, but on one of them, the vim setting t_te got a different setting from the system wide vimrc.

Solution can be found here: https://vi.stackexchange.com/questions/432/prevent-vim-from-clearing-the-terminal-after-exit I.e., just :set t_te= in your ~/.vimrc .

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .