bash – vim色彩奇怪的行为在屏幕内有256种颜色

我试图使语法突出显示(256色)的vim工作在屏幕内,它运行在gterm内。

它的工作相当精细的开始。我的意思是“在开始”是,在我开始屏幕,并进入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条目是否存在,如果存在,则设置它。

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...