4

Когда vim запускается внутри экрана GNU, он не окрашивает фон после текста.

белый фон

Экран выглядит так, как будто он должен быть настроен для корректной обработки 256 цветов:

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

ОС и оболочка, которую я использую:

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

Цветовой тест выглядит нормально, за исключением конца строк:

:runtime syntax/colortest.vim
:source %

VIM Color Test внутри экрана

И когда не используется экран:

VIM Color Test

Есть ли какие-то другие настройки, которые я должен проверить, есть ли режим экрана, который я могу заставить корректно перерисовывать цвета?

2 ответа2

2

Частично основано на: tmux-and-screen-256-term-not-Поддерживается.

Эта проблема решается сама собой при использовании термина «экран». Чтобы правильно определить 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

Чтобы создать запись screen-256colors:

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
1

Внутри screen или tmux значение $TERM должно начинаться с screen (например, screen , screen-256color), а не с xterm .

Текущая проблема возникает из-за разницы в способности bce (стирание цвета фона) двух терминалов.

Описания TERM=screen* не содержат этот флаг, и, соответственно, в screen или tmux escape-последовательность "очистить от курсора до конца строки" закрашивает его цветом фона терминала по умолчанию.

С другой стороны, описания TERM=xterm* содержат этот флаг, и, соответственно, xterm стирает, используя текущий активный цвет фона.

В вашем случае vim неправильно видит, что терминал имеет флаг bce (из-за TERM=xterm*), и поэтому использует сокращенную операцию очистки, чтобы заполнить текущим активным цветом фона, который будет отображаться правильно непосредственно в xterm, но отображается неправильно в screen/tmux . Если вы правильно дадите ему TERM=screen* он заметит отсутствие bce и выберет вывод большого количества символов пробела, а не последовательности "до конца строки", которая будет выглядеть правильно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .