屏幕内的vim颜色有256种颜色的奇怪行为

时间:2011-07-22 08:56:22

标签: bash vim colors terminal gnu-screen

我试图在vimscreen内部gterm处理screen的语法高亮显示(256色)。

一开始工作得很好。我在“开头”的意思是,在我开始vim之后,输入hi Comment ctermfg=68 ,颜色看起来很好,并且有256种颜色。

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

例如,在此之后,如果我输入命令

vim

vim内,评论似乎是“纯粹的”绿色;但是,如果我打开另一个attrcolor b ".I" defbce "on" termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm' term xterm-256color 外部屏幕(在同一个终端中),则使用相同的命令,注释看起来是“黄色”绿色。

以下是与color:

相关的.screenrc设置
screen

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

我所做的是,在有问题的putty会话中,这个脚本提供256种颜色,但其中许多实际上是相同的;但是,当我使用相同配置启动新的屏幕会话时,此脚本会提供256种颜色,这些颜色彼此不同。

编辑:

昨晚我使用screen连接到我的Linux计算机(位于我的办公室,并且始终打开),然后打开了一个screen会话,其中包含多个窗口。昨晚的颜色是正确的。然后在我睡觉之前,我分开了putty会话并关闭了screen

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

putty之外的颜色很好(但仍然在vim)。

编辑:

三年后,在我提出这个问题之后,今天我看到了类似的问题。问题是screen可以在screen之外显示256种颜色,vim可以使用测试脚本显示256种颜色,但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
{{1}}中的

3 个答案:

答案 0 :(得分:86)

简答

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

长答案

这就是为什么会中断:gnome-terminal,screen,tmux,bash,putty和vim已经所有写入以智能处理256种颜色,但你需要尽早正确设置点。在termcapinfo中使用.screenrc实际上是一种胶带解决方案!

如果你的TERM设置正确,它会发出信号暗示你处于256色模式,这意味着它也会在256色模式下运行得很好。

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

.screenrc中,使用screen-256color代替TERM而不是xterm-256color,并删除其他内容!

在PuTTy配置中,使用putty-256color

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


脚注

[1]在TERM中将xterm-256color设置为.bashrc可能有点冒昧,特别是如果您在多台计算机上使用相同的.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色终端。主要部分是等式的另一半;它检查相应的terminfo条目是否存在,如果存在则设置它。

答案 1 :(得分:15)

Max有一个很好的答案,但我实际上必须 ./configure --enable-colors256 重新安装屏幕,以确保config.h文件具有{{1在我的机器上默认不是这样的。然后,我发现其他设置不是必需的,只要我确保我的#define COLORS256 1设置为TERM

答案 2 :(得分:1)

在最新版本的屏幕(v4.99.0)中,无需在term screen-256color中使用.screenrc。即使没有此设置,屏幕内外的Vim颜色也完全相同。

注1:我已经在Mac OS High Sierra 10.13.4和Ubuntu 16.04上测试了此功能。

可以使用获取最新版本的屏幕 git clone https://git.savannah.gnu.org/git/screen.git

注2:与某些以前的版本不同,configuring这个版本的屏幕不需要使用--enable-colors256选项

注意3:要成功完成此配置,您需要具有PAM支持。在ubuntu中,您可以使用sudo apt-get install libpam0g-dev

注4:在执行sudo时,您需要在Ubuntu上拥有make install访问权限,因为此步骤使用chown