Як замінити буфер екрана vim на попередню активність bash після виходу?


14

Я намагаюся з'ясувати, що таке функція bash (або vim). Ось сценарій. Я в терміналі bash, потім відредагуйте щось з vim, потім вийдіть назад до bash. У деяких терміналах екран сеансу vim зникає, щоб показати попередню активність bash shell (це те, що я хочу?).

В інших залишається буфер екрану сеансу vim (приховує стару активність оболонки bash). Мені доведеться або очистити екран, або почекати, поки моя баш-активність виштовхне цей буфер vim сесії з екрану.

Як я можу контролювати цю поведінку, щоб замінити буфер сеансу vim на попередню активність bash?

Дякую Тіме


Відповіді:


10

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має різні терміни.


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, який, ймовірно, не визначений. Хороше запитання, але це завжди виглядає неправильно і для мене.
екернер

2

Тім. Обидві наведені відповіді вірні. Vim перемикає термінал на "альтернативний екран", якщо можливість зробити це визначено в записі termcap для $ TERM.

Ви кажете "в деяких терміналах (... це працює правильно ...)" і "в інших (... працює неправильно ...)"

У вас є такий самий термінальний емулятор для всіх цих терміналів?

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

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

Сподіваюся, що це допомагає!
-pbr


1

Це стосується вашого терміналу та налаштувань машини, що стосуються інформації про термінал. Одне портативне рішення - використовувати GNU Screen. Відкрийте одне вікно для Vim та інше для Bash, тим самим розділивши два сеанси. Якщо ви використовуєте графічний термінал, такий як xterm на X11, Gnome Terminal в Gnome або Terminal.app в OS X, ви можете відкрити нове вікно або вкладку, щоб отримати той же ефект.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.