它的工作相当精细的开始。我的意思是“在开始”是,在我开始屏幕,并进入vim,颜色看起来不错,真的256色。
但过了一段时间(我不知道确切的多长时间),颜色自动变回一个外观,好像只有8(或16?)的颜色。
例如,在此之后已经发生,如果我输入命令
hi Comment ctermfg=68
在vim里面,注释看起来是“纯”绿色;但是,如果我打开另一个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无关。
我做的是,在屏幕会话有问题,这个脚本提供256种颜色,但其中许多实际上是一样的;然而,当我用相同的配置开始一个新的屏幕会话,这个脚本提供了彼此不同的256种颜色。
编辑:
昨晚,我连接到我的Linux计算机(这是在我的办公室,它总是打开)与putty,然后打开一个屏幕会话与多个窗口。颜色昨晚是正确的。然后在我睡觉之前,我分离了屏幕会话并关闭了putty。
现在在早上,当我附加屏幕会话在腻子了,颜色崩溃:他们看起来好像只有8种颜色。
颜色是精细的屏幕外(但仍然在腻子)。
编辑:
三年后,我提出这个问题,今天我看到一个类似的问题。问题是vim可以在屏幕外显示256种颜色,屏幕可以用测试脚本显示256种颜色,但vim不能在屏幕内显示任何颜色(只能显示黑白)。就像对自己的一个注释,这里是我使用的.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
in .bashrc。
在您的.bashrc中将TERM设置为xterm-256color,并将term screen-256color设置为.screenrc。
长答案
这就是为什么这个断点:gnome-terminal,screen,tmux,bash,putty和vim都编写智能地处理256色,但你需要在最早的可能点正确设置的东西。在你的.screenrc中使用termcapinfo实际上是一个胶带解决方案!
如果您的TERM设置正确,它会发信号通知您,你是在256色模式,这意味着它将播放漂亮的屏幕在256色模式以及。
所以,在.bashrc中,导出TERM = xterm-256color。 [1]
在你的.screenrc中,使用screen-256color作为TERM,而不是xterm-256color,并删除剩余的cruft!
在您的PuTTy配置中,使用putty-256color。
你可以下载termcap条目文件,并把它们放在〜/ .terminfo / s和〜/ .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的别名是一种防御措施,以防止我们尝试在不一定支持它的远程计算机上打开一个256色终端。主块是等式的另一半;它检查相应的terminfo条目是否存在,如果存在,则设置它。