Как заменить экранный буфер vim предыдущей активностью bash после выхода?
Я пытаюсь выяснить, что такое функция bash (или vim). Вот сценарий. Я нахожусь в терминале bash, затем редактирую что-то с помощью vim, затем возвращаюсь обратно в bash. В некоторых терминалах экран сеанса vim исчезает, показывая предыдущую активность оболочки bash (это то, что я хочу?).
В других случаях экранный буфер сеанса vim остается (скрывая старые действия оболочки bash). Мне придется либо очистить экран, либо подождать, пока моя активность bash не вытолкнет этот буфер сеанса vim из экрана.
Как я могу контролировать это поведение, чтобы заменить буфер сеанса vim предыдущей активностью bash?
Спасибо Тим
5 ответов
Вим отправляет t_ti
а также t_ks
to the terminal when a session is started and t_te
а также t_ke
when it ends. t_ti
а также t_te
sequences cause the terminal to switch to its alternate screen.
В вашем ~/.vimrc
file you can make vim
leave the document on screen when it exits by including this line:
set t_ti=""
if you have a line similar to that, removing it should make the previous terminal contents appear when you exit vim
,
Причиной этой проблемы может быть использование программы screen
, Я нахожу это, когда я в screen
Сессия vim не может вернуть состояние терминала.
Не уверен, относится ли он к экрану или к комбинированному экрану /vim в Ubuntu 15.10. Думаю, причина та же, что и описанная выше. screen
имеет различный termcap.
Просто добавьте строку в ваш ~/.bash_profile
файл для экспорта TERM как xterm при каждом входе в систему. Делайте следующим образом;
echo "TERM=xterm; export TERM" >> ~/.bash_profile
Теперь в следующий раз, когда вы войдете в систему, ваша проблема будет решена, и если вы не хотите повторно войти в систему, вы можете сделать одно из...
// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
Тим. Оба приведенных выше ответа верны. Vim переключает терминал на "альтернативный экран", если возможность сделать это определена в записи termcap для $ TERM.
Вы говорите "в некоторых терминалах (... это работает правильно ...)" и "в других (... это работает неправильно ...)"
Вы используете один и тот же эмулятор терминала для всех этих терминалов?
Например, в моей домашней Linux-системе у меня есть gnome-терминал, xterm, Konsole, yakuake и, возможно, еще несколько вещей, о которых я забыл, а также "виртуальные терминалы", связанные с ctrl-alt-F1 ... Ctrl-Alt-F6 или около того. Большинство из них могут работать со "стандартной" записью termcap для "xterm" - за исключением виртуальных терминалов, которые имеют определение терминала под названием "linux".
Проверьте сам эмулятор терминала и значение $ TERM на терминалах, которые работают, и на тех, которые не работают, чтобы увидеть, что отличается. Кроме того, если вы вошли в систему как другой пользователь, это может быть в основе проблемы - поскольку у каждого пользователя есть свой собственный .bashrc, различные настройки могут отличаться от пользователя к пользователю.
Надеюсь, это поможет!
-pbr
Это связано с вашим терминалом и настройками вашего устройства, связанными с информацией о терминале. Одним из портативных решений является использование экрана GNU. Откройте одно окно для Vim, а другое - для Bash, тем самым разделив две сессии. Если вы используете графический терминал, такой как xterm в X11, Gnome Terminal в Gnome или Terminal.app в OS X, вы можете открыть новое окно или вкладку, чтобы получить тот же эффект.