Каковы настройки терминала, если я часто переключаю mosh между передним планом и фоном
Я использую mosh для доступа к моей удаленной машине с Ubuntu. Клиент, который я использую в Windows - это MobaXterm, в котором есть плагин для mosh. Тот, который я использую в Ubuntu, это просто mosh-клиент, который я получаю от apt-get. Проблема в том, что я обычно открываю vim в bash для редактирования своего кода и возвращаюсь в bash с помощью Ctrl + Z. И я возвращаю VIM с помощью FG. НО, когда я нажимаю Ctrl+Z, содержимое моего кода все еще находится в моем окне терминала, а под ним находится bash. SSH работает отлично. Код исчезает, и появляется только что-то подобное.
[1]+ Stopped vim .bashrc
Я думаю, это связано с настройкой моего терминала. Я использую настройки по умолчанию Ubuntu. $ TERM возвращает xterm. Терминал, который я использую в MobaXterm, также является xterm. Может кто-нибудь сказать мне, как я могу получить тот же результат, что и соединение SSH?
1 ответ
Поведение, при котором экран очищается и остается только короткое сообщение, похоже на программу, которая переключается между обычным и альтернативным экранами xterm. MobaXterm использует PuTTY, который реализует эту функцию из xterm.
Настройка для TERM
сообщает библиотеке termcap/terminfo/curses, какое описание терминала использовать. Вот в чем разница:
- В случае программы mosh эта библиотека находится на вашем локальном компьютере.
- При использовании ssh эта библиотека находится на удаленной машине.
Это сложнее: vim на самом деле использует базу данных терминала на машине, на которой вы ее запускаете, но у mosh есть последнее слово над тем, какие escape-последовательности отправляются терминалу. Похоже, что mosh видит описание локального терминала, где smcup
а также rmcup
Возможности terminfo не позволяют "xterm" переключаться на альтернативный экран.
У меня нет MobaXterm под рукой, чтобы проверить, но вы можете проверить это. mosh это программа curses / ncurses. Поэтому разумно предположить, что MobaXterm также имеет infocmp
программа. С использованием infocmp
Программа, вы можете увидеть, что его база данных терминала для этих значений, например,
smcup=\E[?1049h,
rmcup=\E[?1049l,
или же
smcup=\E[?47h,
rmcup=\E[2J\E[?47l,
Последние представляют собой оригинальные последовательности xterm (начало 1990-х годов), первые - современные xterm (конец 1990-х годов). Интересно, что некоторые эмуляторы "xterm" не реализуют более новые. Некоторые подробности содержатся в FAQ по xterm. Почему экран не очищается при запуске vi?
Если у вас есть infocmp
тогда вы, скорее всего, tic
, Вы можете изменить свою локальную базу данных терминала
- использование
infocmp
создать файл, содержащий описание терминала - отредактируйте файл (добавьте строки для этих двух или используйте старые значения, если новые не работают)
- использование
tic
перекомпилировать описание терминала
(Если MobaXterm предоставляет mosh без утилит curses, мало что можно сделать, кроме как отправить отчет об ошибке в MobaXterm).
Выше написано 8 июня. Я посмотрел на MobaXterm вчера вечером и получил несколько комментариев:
- MobaXterm является автономным (приложение, использующее busybox), поэтому я обычно не обращал бы на него особого внимания.
- У него умеренно старое описание терминала для xterm (я мог бы точно определить его, но не случайно, вероятно, 5-8 лет).
- Альтернативное переключение экрана намного старше, и, как вы указали, ничего особенного не поделаешь, я не стал больше заниматься расследованием.
- Если бы это было необходимо, вполне вероятно, что вы могли бы скопировать скомпилированную запись terminfo из Linux (но это было бы неприятно).
Для Ubuntu я быстро взглянул на мою машину 14.04 с vim, работающим в gnome-терминал и xterm. В качестве совпадения я недавно просматривал описание терминала первого и заметил, что запись, для которой я написал gnome
(устарело) или vte
(предпочтительно) использовал старый xterm smcup
/ rmcup
, Ubuntu 14.04 достаточно старая, чтобы gnome-Terminal не распознавал более новый xterm smcup
и не переключался на альтернативный экран с помощью TERM=xterm
, Но это сработало с TERM=vte
(или же TERM=gnome
). Вы бы имели эти описания, если ncurses-term
пакет установлен.