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

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

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

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

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

 

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

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

```
tput sgr0

```

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

Глядя на escape-последовательности, отправленные vim на выходе, не показывает ничего необычного — в описании терминала (используя [`unmap`](http://invisible-island.net/misc_tools/index.html#item: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`**), вы точно увидите эту проблему.

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

* [Почему экран не отображается при запуске vi?](http://invisible-island.net/xterm/xterm.faq.html#xterm_tite) (xterm FAQ)
* [Мой терминал показывает некоторые неокрашенные пробелы](http://invisible-island.net/ncurses/ncurses.faq.html#bce_mismatches)
* [Последовательности управления XTerm](http://invisible-island.net/xterm/ctlseqs/ctlseqs.html)

 

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

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

Источник: [При использовании vim или менее на экране gnu выключение vim или менее оставляет затяжной отпечаток](/questions/424270/when-using-vim-or-less-in-gnu-screen-quitting-vim-or-less-leaves-a-lingering-imprint)

 

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

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

```
altscreen on

```

в файле .screenrc.

 [qaru.site/questions/434591/...](/questions/434591/vim-background-with-gnu-screen/1923704#1923704)