14

I'm trying to find out what a bash (or vim) feature is. Here's the scenario. I'm in a bash terminal, then edit something with vim, then exit back to bash. In some terminals, the vim session screen disappears to show the previous bash shell activity ( this is what I want? ).

In others, the vim session screen buffer remains (hiding old bash shell activity). I'll have to either clear the screen, or wait until my bash activity pushes that vim session buffer out of the screen.

How can I control this behaviour to replace vim session buffer with previous bash activity?

Thanks Tim

1

5 Answers 5

10

Vim sends t_ti and t_ks to the terminal when a session is started and t_te and t_ke when it ends. The t_ti and t_te sequences cause the terminal to switch to its alternate screen.

In your ~/.vimrc file you can make vim leave the document on screen when it exits by including this line:

set t_ti=""

if you have a line similar to that, removing it should make the previous terminal contents appear when you exit vim.

4

Simply add a line to your ~/.bash_profile file to export TERM as xterm each time you login. Do as follows;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Now next time you login your problem will be fixed, and if you dont wanna re-login you can do one of ...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
2
  • 1
    wouldn't that be export $TERM?
    – chrsblck
    Feb 22, 2014 at 23:03
  • 1
    @chrsblck: No, because export exports the name (eg TERM in this case) as an environment variable rather than a local variable. If you used export $TERM in this example then the $TERM var would resolve to xterm you would set the env var $xterm, which is probably not defined. Good question though, it always looks wrong to me too.
    – ekerner
    Feb 23, 2014 at 14:39
4

A cause for this problem can be using the program screen. I find that when I'm in a screen session vim can not return the terminal state.

Not sure if its specific to screen or to the screen/vim combo in Ubuntu 15.10. Same cause as described above, I guess screen has different termcap.

1
  • 2
    Adding altscreen on into ~/.screenrc file solves the issue for screen. Nov 10, 2016 at 4:06
1

This has to do with your terminal and your machine's settings dealing with the terminal info. One portable solution is to use GNU Screen. Open one window for Vim and another for Bash, thereby separating the two sessions. If you are using a graphical terminal such as xterm on X11, Gnome Terminal on Gnome or Terminal.app on OS X then you can open a new window or tab to gain the same effect.

1

Tim. Both of the above answers are correct. Vim switches the terminal to an "alternate screen" if the capability to do that is defined in the termcap entry for $TERM.

You say "in some terminals (...it works right...)" and "in others (...it works wrong...)"

Are you running the exact same terminal emulator for all of those terminals?

For example, on my home linux box, I have gnome-terminal, xterm, Konsole, yakuake, and probably a few more I've forgotten about, along with the "virtual terminals" associated with the ctrl-alt-F1...ctrl-alt-F6 or so. Most of these can work with the "standard" termcap entry for "xterm" - except the virtual terminals which have a terminal definition named "linux".

Check the terminal emulator itself and the value of $TERM on terminals that work and on ones that don't, to see what's different. Also, if you're logged in as a different user sometimes, that could be at the heart of the issue - since each user has his own .bashrc various settings can differ from user to user.

Hope that helps!
-pbr

You must log in to answer this question.