Терминал сохраняет цвет bg после закрытия vim - с использованием цветовой схемы и шпаклевки - 256 цветов

После закрытия приложения, использующего форматирование цвета (например, vim), терминал сохраняет некоторые свойства, такие как цвет фона. Это происходит только при использовании термина putty-256color или screen. Я наблюдаю подобное поведение в RHEL 6.5 и Ubuntu 14.04LTS.

Единственное решение - это reset терминал.

При использовании термина xterm-256color (также с эмулятором терминала Putty) проблемы нет.

Есть ли решение/объяснение, почему это происходит, и что я могу потерять при использовании xterm в эмуляторе терминала Putty, то есть было бы предпочтительнее использовать putty-256color или xterm-256color term?

3
задан vobelic 07 июля '14 в 17:38
источник поделиться

3 ответов

В описании проблемы упоминается, что "терминал сохраняет некоторые свойства, такие как цвет фона". Это может относиться к функции стирания заднего фона, поддерживаемой PuTTY. Когда экран стирается, терминал заполняет фон (на стертой части) текущим цветом фона.

На первый взгляд альтернативная функция экрана, похоже, не связана. Я могу создать проблему с использованием PuTTY и vim, используя "утреннюю" цветовую схему с функцией альтернативного экрана PuTTY или без нее. При выходе экран имеет тот же серый фон, что и в vim. Если я следую этому,

tput sgr0

то эта команда сбрасывает цвета, так что новый текст записывается с цветом фона по умолчанию для терминала (как и ожидалось).

Глядя на escape-последовательности, отправленные vim на выходе, не показывает ничего необычного — в описании терминала (используя unmap, чтобы сделать их в читаемой форме):

\n
\E[1m
\E[38;5;130mendif
\E[0m
\E[30m  
\E[47m  
\E[24;63H1,1
\E[11CTop   
\E[1;1H  
\E[?25h  
\E[?25l
\E[24;63H
\E[K
\E[24;1H:
\E[?25hq 
\E[?25l 
\E[?25h\r
\E[?25l  
\E[24;1H
\E[K
\E[24;1H
\E[?1l   
\E>
\E[?25h
\E[2J   
\E[?47l

То есть, vim отправляет sgr0 (\E[0m) сразу после установки фона на серый (\E[38;5;130m). Для этого нужно reset цвета. Но это не так. Есть еще несколько операций перед тем, как vim отправит двухчастную escape-последовательность в rmcup

\E[2J
\E[?47l

который должен очистить экран (альтернативный) и вернуться к нормальному экрану. Соответствующая возможность в xterm равна

\E[?1049l

который объединяет две операции. Увидев это, в PuTTY возникают две проблемы, которые вместе создают проблему:

  • цвета не reset, как ожидалось, и
  • цвет применяется для установки фона на обычном экране.

Просто работает с TERM=xterm, используя код 1049, потому что разработчики PuTTY, по-видимому, тестировали это. Например, если это восстанавливает нормальные цвета экрана (но не использует код 47), вы точно увидите эту проблему.

Дальнейшее чтение:

1
ответ дан Thomas Dickey 16 июня '16 в 23:49
источник поделиться

Решение этого - включить altscreen под экраном GNU. Таким образом, термин экрана ведет себя как обычный xterm - полноэкранное приложение имеет отдельный кадр/экран из остальной части вывода.

Важно, однако, иметь правильный набор TERM, чтобы приложение знало, как переключаться между обычным и альт-экраном.

Источник: При использовании vim или менее на экране gnu выключение vim или менее оставляет затяжной отпечаток

0
ответ дан vobelic 08 июля '14 в 12:03
источник поделиться

См. этот ответ для некоторого вдохновения о том, как исправить эту проблему:

Главное - включить

altscreen on

в файле .screenrc.

qaru.site/questions/434591/...

0
ответ дан bloodrootfc 16 июня '16 в 18:30
источник поделиться

Другие вопросы по меткам