Strange behavior of vim color inside screen with 256 colors

Viewed 25640

I was trying to make the syntax highlighting (with 256 colors) of vim work inside screen, which is running inside gterm.

It works quite fine in the beginning. What I mean by "in the beginning" is, after I start screen, and enter vim, the colors look fine, and there are really 256 colors.

But after a while (I don't know exactly how long) the colors automatically change back to an appearance as if there are only 8 (or 16?) colors.

For example, after this has already occurred, if I enter the command

hi Comment ctermfg=68

inside vim, the comments appear to be "pure" green; however, if I open another vim outside screen (in the same terminal), then with the same command the comments appear to be a "yellowish" green.

The following is my .screenrc settings related to color:

attrcolor b ".I"
defbce "on"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term xterm-256color

After running a python script to display all the colors, I find out that maybe this is a problem of screen itself, and has nothing to do with vim.

What I did is, inside the screen session with problems, this script gives 256 colors, but many of them are actually the same; however, when I start a new screen session with the same configuration, this script gives 256 colors which are distinct from each other.

Edit:

Last night I connected to my Linux computer (which is in my office and it is always on) with putty, then opened a screen session with multiple windows in it. The colors are correct last night. Then before I went to sleep I detached the screen session and closed putty.

Now in the morning when I attach that screen session in putty again, the colors crash: they appear as if there are only 8 colors.

The colors are fine outside screen (but still in putty).

Edit:

Three years later after I asked this question, today I saw a similar problem. The problem is that vim can display 256 colors outside screen, and screen can display 256 colors with a test script, but vim can't display any color (can only display black and white) inside screen. Just as a note to myself, here is the .screenrc file I am using

hardstatus alwayslastline "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %Y-%m-%d %c"
shell "bash"
startup_message off
vbell off
altscreen on
attrcolor b ".I"
defbce "on"
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
term screen-256color

The solution to the problem is already mentioned in the accepted answer, namely, I need to include

export TERM=xterm-256color

in .bashrc.

3 Answers

In the latest version of screen (v4.99.0), there is no need to use term screen-256color in your .screenrc. Even without this setting, the vim color inside and outside screen is exactly the same.

Note 1: I have tested this feature on Mac OS High Sierra 10.13.4 and Ubuntu 16.04.

One can obtain the latest version of screen using git clone https://git.savannah.gnu.org/git/screen.git.

Note 2: Unlike some of the previous versions, While configuring this version of screen there is no need to use --enable-colors256 option

Note 3: You need to have PAM support for this configuration to be successful. In ubuntu, you can use sudo apt-get install libpam0g-dev

Note 4: You will need sudo access on Ubuntu while doing make install as this step uses chown.

Related