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


14

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

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

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

Спасибо Тим


Ответы:


10

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

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

set t_ti=""

если у вас есть строка, подобная этой, удаление ее должно привести к появлению предыдущего содержимого терминала при выходе vim.


4

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

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


2
Добавление altscreen onв файл ~ / .screenrc решает проблему с экраном.
BartBiczBoży

3

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

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

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

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

1
не так ли export $TERM?
chrsblck

1
@chrsblck: Нет, потому что exportэкспортирует имя (например, TERMв этом случае) как переменную среды, а не как локальную переменную. Если бы вы использовали export $TERMв этом примере, тогда $TERMvar разрешил бы xtermвам, установив env var $xterm, который, вероятно, не определен. Хороший вопрос, хотя, он всегда выглядит неправильно и для меня.
ekerner

2

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

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

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

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

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

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


1

Это связано с вашим терминалом и настройками вашего устройства, связанными с информацией о терминале. Одним из портативных решений является использование экрана GNU. Откройте одно окно для Vim, а другое - для Bash, тем самым разделив две сессии. Если вы используете графический терминал, такой как xterm в X11, Gnome Terminal в Gnome или Terminal.app в OS X, вы можете открыть новое окно или вкладку, чтобы получить тот же эффект.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.