
Я пытаюсь выяснить, что такое функция 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