当 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 %
不使用屏幕时:
我还应该检查其他设置吗?是否有某种屏幕模式可以强制正确重新绘制颜色?
答案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
(例如screen
,screen-256color
)而不是xterm
。
当前问题是由于bce
两个终端的(背景颜色擦除)能力存在差异而出现的。
描述TERM=screen*
不包含此标志,因此,screen
或tmux
“从光标到行尾清除”转义序列使用终端的默认背景颜色进行绘制。
另一方面,TERM=xterm*
描述确实包含此标志,因此xterm
使用当前活动的背景颜色进行擦除。
在您的例子中,vim
错误地认为终端有bce
标志(因为TERM=xterm*
),因此使用简写清除操作来填充当前活动的背景颜色,该颜色在 xterm 下会正确显示,但在screen
/下会错误显示tmux
。如果您正确地给出它,TERM=screen*
那么它会注意到缺少bce
,并选择发出大量空格字符,而不是“清除到行尾”序列,这看起来是正确的。