Как заменить экранный буфер vim предыдущей активностью bash после выхода?

Как заменить экранный буфер vim предыдущей активностью bash после выхода?

Я пытаюсь выяснить, что такое функция bash (или vim). Вот сценарий. Я в терминале bash, затем редактирую что-то с помощью vim, затем возвращаюсь в bash. В некоторых терминалах экран сеанса vim исчезает, чтобы показать предыдущую активность оболочки bash (это то, что мне нужно?).

В других случаях буфер экрана сеанса vim остается (скрывая старую активность оболочки bash). Мне придется либо очистить экран, либо подождать, пока моя активность bash не вытолкнет этот буфер сеанса vim за пределы экрана.

Как можно контролировать это поведение, чтобы заменить буфер сеанса vim предыдущей активностью bash?

Спасибо, Тим.

решение1

Vim отправляет t_tiи t_ksна терминал при запуске сеанса и t_teи t_keпри его завершении. Последовательности t_tiи t_teзаставляют терминал переключаться на альтернативный экран.

В своем ~/.vimrcфайле вы можете vimоставить документ на экране при выходе, включив следующую строку:

set t_ti=""

Если у вас есть похожая строка, то ее удаление должно привести к тому, что при выходе отобразится предыдущее содержимое терминала vim.

решение2

Просто добавьте строку в ваш ~/.bash_profileфайл, чтобы экспортировать TERM как xterm каждый раз при входе в систему. Сделайте следующее;

echo "TERM=xterm; export TERM" >> ~/.bash_profile

Теперь при следующем входе в систему ваша проблема будет устранена, и если вы не хотите повторно входить в систему, вы можете выполнить одно из следующих действий...

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile

решение3

Причиной этой проблемы может быть использование программы screen. Я обнаружил, что когда я нахожусь в screenсеансе, vim не может вернуть состояние терминала.

Не уверен, относится ли это к экрану или к комбинации экран/vim в Ubuntu 15.10. Та же причина, что описана выше, полагаю, screenимеет другой termcap.

решение4

Тим. Оба ответа выше верны. Vim переключает терминал на «альтернативный экран», если возможность сделать это определена в записи termcap для $TERM.

Вы говорите «в некоторых терминалах (...работает правильно...)» и «в других (...работает неправильно...)»

Вы используете один и тот же эмулятор терминала для всех этих терминалов?

Например, на моем домашнем Linux-боксе у меня есть gnome-terminal, xterm, Konsole, yakuake и, возможно, еще несколько, о которых я забыл, вместе с "виртуальными терминалами", связанными с ctrl-alt-F1...ctrl-alt-F6 или около того. Большинство из них могут работать со "стандартной" записью termcap для "xterm" - за исключением виртуальных терминалов, у которых есть определение терминала с именем "linux".

Проверьте сам эмулятор терминала и значение $TERM на работающих и неработающих терминалах, чтобы увидеть, в чем разница. Кроме того, если вы иногда входите в систему под другим пользователем, это может быть причиной проблемы — поскольку у каждого пользователя есть свой .bashrc, различные настройки могут отличаться от пользователя к пользователю.

Надеюсь, это поможет!
-pbr

Связанный контент