在屏幕内运行时,Vim 不会对行尾进行着色

在屏幕内运行时,Vim 不会对行尾进行着色

当 vim 在 gnu screen 内启动时,它不会在文本后为背景着色。

白色背景

屏幕看起来应该设置为正确处理 256 种颜色:

$ screen
$ tput colors
256
$ echo $term
xterm-256colors

我正在使用的操作系统和 Shell:

$ cat /etc/redhat-release 
Red Hat Enterprise Linux WS release 4 (Nahant Update 9)
$echo $shell
/bin/tcsh

颜色测试看起来工作正常,除了行尾:

:runtime syntax/colortest.vim
:source %

vim 屏幕内颜色测试

不使用屏幕时:

vim 颜色测试

我还应该检查其他设置吗?是否有某种屏幕模式可以强制正确重新绘制颜色?

答案1

部分基于:tmux-and-screen-256-term 不受支持

使用“屏幕”术语时,问题自行解决。要正确识别为 256 种颜色,它应该是“screen-256colors”。这会导致以下错误:

E558: Terminal entry not found in terminfo
'screen-256colors' not known. Available builtin terminals are:
    builtin_gui
    builtin_ansi
    builtin_xterm
    builtin_iris-ansi
    builtin_d

要创建屏幕 256 色条目:

infocmp screen > screen-256color.ti

更改(screen-256color.ti)

#       Reconstructed via infocmp from file: /usr/share/terminfo/s/screen
screen|VT 100/ANSI X3.64 virtual terminal, 
        am, km, mir, msgr, xenl, 
        colors#8, cols#80, it#8, lines#24, ncv#3, pairs#64,

到 :

#       Reconstructed via infocmp from file: /usr/share/terminfo/s/screen
screen-256color|VT 100/ANSI X3.64 virtual terminal, 
        am, km, mir, msgr, xenl, 
        colors#256, cols#80, it#8, lines#24, ncv#3, pairs#64,

现在创建 terminfo:

tic screen-256color.ti

答案2

screen或内部tmux, 的值$TERM需要以 开头screen(例如screenscreen-256color)而不是xterm

当前问题是由于bce两个终端的(背景颜色擦除)能力存在差异而出现的。

描述TERM=screen*不包含此标志,因此,screentmux“从光标到行尾清除”转义序列使用终端的默认背景颜色进行绘制。

另一方面,TERM=xterm*描述确实包含此标志,因此xterm使用当前活动的背景颜色进行擦除。

在您的例子中,vim错误地认为终端有bce标志(因为TERM=xterm*),因此使用简写清除操作来填充当前活动的背景颜色,该颜色在 xterm 下会正确显示,但在screen/下会错误显示tmux。如果您正确地给出它,TERM=screen*那么它会注意到缺少bce,并选择发出大量空格字符,而不是“清除到行尾”序列,这看起来是正确的。

相关内容