43

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

user1

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.

user2

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.

Details

$ 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.

mtk
  • 27,530
  • 35
  • 94
  • 130
  • Are user1 and user2 accounts on the same or different machines? – jasonwryan Jan 07 '13 at 08:03
  • @jasonwryan Logging on same machine too shows same scenario. @ warl0ck Thanks for that. – mtk Jan 07 '13 at 08: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 Nov 10 '16 at 06:27

4 Answers4

35

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

BitsOfNix
  • 5,117
  • 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 Jan 07 '13 at 08: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 http://unix.stackexchange.com/questions/43945/whats-the-difference-between-various-term-variables, it might explain better than me. – BitsOfNix Jan 07 '13 at 09: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: http://unix.stackexchange.com/questions/4126/what-is-the-exact-difference-between-a-terminal-a-shell-a-tty-and-a-con – Leonid Jan 07 '13 at 09: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 Jan 07 '13 at 09: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 Mar 04 '15 at 10:12
  • I'm having the same issue on CentOS 8. I added export TERM=xterm to my .bashrc file and then logged off and back on. Nothing changed. – Daniel Walker Aug 11 '20 at 16:08
  • Doesn't work for me. I have 2 machines both set to xterm-256color and one behaves correctly and the other is not. How do you explain this? – jaques-sam Oct 21 '20 at 09:03
26

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'.

Daniel Walker
  • 801
  • 1
  • 9
  • 35
2

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 Sep 28 '21 at 08:20
0

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 .

Gab
  • 101