12

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

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

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

Спасибо Тим

5 ответов5

9

Vim отправляет 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

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

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

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

// either ...
export TERM=xterm
// ... or ...
TERM=xterm; export TERM
// ... or ...
source ~/.bash_profile
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, вы можете открыть новое окно или вкладку, чтобы получить тот же эффект.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .