加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 09:25:50 所属栏目:安全 来源:网络整理
导读:我试图使语法突出显示(256色)的vim工作在屏幕内,它运行在gterm内。 它的工作相当精细的开始。我的意思是“在开始”是,在我开始屏幕,并进入vim,颜色看起来不错,真的256色。 但过了一段时间(我不知道确切的多长时间),颜色自动变回一个外观,好像只有8(或
我试图使语法突出显示(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[rE[mE[2JE[HE[?7hE[?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条目是否存在,如果存在,则设置它。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读