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
.