VIM色彩奇怪的行为256色屏幕内
我试图让语法突出显示(256色) vim
工作在screen
,这是在gterm
内gterm
。
它在一开始工作得很好。 我的意思是“在开始”是,我开始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种颜色,但vim
在screen
内不能显示任何颜色(只能显示黑白)。 就像我自己的一个说明,这里是我使用的.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色模式下也能很好的显示。
所以,在你的.bashrc
, export 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
。