VIM色彩奇怪的行为256色屏幕内

我试图让语法突出显示(256色) vim工作在screen ,这是在gtermgterm

它在一开始工作得很好。 我的意思是“在开始”是,我开始screen ,进入vim ,颜色看起来很好,并有真正的256色。

但过了一段时间(我不知道究竟有多长时间),颜色会自动变回一个外观,好像只有8(或16?)种颜色。

例如,在此之后,如果我input命令

 hi Comment ctermfg=68 

vim里面,评论似乎是“纯粹”的绿色; 然而,如果我在屏幕之外(在同一个terminal)打开另一个vim ,那么使用相同的命令,这些注释看起来是一个“淡黄色”的绿色。

以下是我的.screenrc相关的颜色设置:

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

运行一个python脚本来显示所有的颜色后,我发现这可能是一个屏幕本身的问题,与vim无关。

我所做的是,在screen会话中出现问题,这个脚本给出256种颜色,但其中许多实际上是相同的; 但是,当我使用相同的configuration启动一个新的屏幕会话时,此脚本提供了256种彼此不同的颜色。

编辑:

昨天晚上,我用putty连接到我的Linux计算机(在我的办公室,它总是在),然后打开一个screen会话,其中有多个窗口。 昨晚的颜色是正确的。 然后,在我去睡觉之前,我分离了screen会议,并closuresputty

现在在早上当我用putty重新加上screen会话时,颜色就会崩溃:它们看起来好像只有8种颜色。

screen外的颜色很好(但还是在putty )。

编辑:

三年后,我问了这个问题,今天我看到了类似的问题。 问题是vim可以在screen外显示256种颜色, screen可以用testing脚本显示256种颜色,但vimscreen内不能显示任何颜色(只能显示黑白)。 就像我自己的一个说明,这里是我使用的.screenrc文件

 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 

在接受的答案中已经提到了解决这个问题的方法,也就是我需要包括的

 export TERM=xterm-256color 

.bashrc

简答

在你的.bashrc中将TERM设置为xterm-256color ,并将term screen-256color放在.screenrc

长答案

这就是为什么这会破坏:gnome-terminal,screen,tmux,bash,putty和vim已经被写成智能地处理256种颜色,但是你需要尽早设置正确的东西。 在.screenrc使用termcapinfo实际上是一种胶带解决scheme!

如果您的TERM设置正确,它将表明您正在使用256色模式,这意味着它将在256色模式下也能很好的显示。

所以,在你的.bashrcexport TERM=xterm-256color 。 [1]

.screenrc ,使用screen-256color替代xterm-256color ,删除剩余的部分!

在你的PuTTYconfiguration中,使用putty-256color

您可以下载termcap条目文件,并将它们放在~/.terminfo/s~/.terminfo/p ,如果您的文件~/.terminfo/p默认没有它们。


脚注

[1]在.bashrc中将TERM设置为xterm-256color可能有点冒失,特别是如果在多台机器上使用相同的.bashrc 。 我发现以下片段是相当有效的:

 case "$TERM" in *-256color) alias ssh='TERM=${TERM%-256color} ssh' ;; *) POTENTIAL_TERM=${TERM}-256color POTENTIAL_TERMINFO=${TERM:0:1}/$POTENTIAL_TERM # better to check $(toe -a | awk '{print $1}') maybe? BOX_TERMINFO_DIR=/usr/share/terminfo [[ -f $BOX_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \ export TERM=$POTENTIAL_TERM HOME_TERMINFO_DIR=$HOME/.terminfo [[ -f $HOME_TERMINFO_DIR/$POTENTIAL_TERMINFO ]] && \ export TERM=$POTENTIAL_TERM ;; esac 

ssh的alias是防止我们试图在不一定支持它的远程机器上打开256色terminal的防御措施。 主要的块是另一半的方程; 它检查是否存在相应的terminfo条目,如果存在则设置它。

马克斯有一个很好的答案,但我实际上已经重新安装 ./configure --enable-colors256屏幕,以确保config.h文件有#define COLORS256 1集,这是默认情况下在我的机器上并不是这样。 然后,我发现其他设置是没有必要的,只要我确保我的TERM被设置为xterm-256color