Как я могу все еще видеть текст «человека» после того, как я бросил человека?


16

Я обычно использую tcsh или bash и часто хочу использовать 'man' для просмотра параметров команды. В настоящее время, когда я покидаю man или ctrl-C, текст man исчезает, и я вижу буфер обратной прокрутки, который был там до того, как я выполнил команду 'man'. Я хотел бы по-прежнему видеть текст «man», который я просматривал, в качестве справки, пока я набираю команду в командной строке, не открывая второе окно, как я могу это сделать?

Ответы:


17

Это происходит от функции «альтернативного экрана», включенной в некоторые (аппаратные) терминалы и большинство (программных) эмуляторов терминалов. Что происходит, так это то, что некоторые программы, поддерживающие терминалы, переключаются на альтернативный «экран», чтобы выполнить свою работу, и переключаются обратно на обычный «экран», когда их закрывают (выход, приостановка и т. Д.). Это эффективно очищает конечный результат таких программ.

Поиск в сети по запросу «terminfo предотвращает altscreen» предоставил страницу, на которой обсуждается альтернативный экран «проблема» и несколько решений .

Как описано на этой связанной странице, некоторые программы можно настроить, чтобы избежать использования альтернативного экрана. -XВариант для менее является косвенным способом сделать это. Вим может быть сконфигурирован подобным образом путем снятия с охраны t_tiи t_teпеременные.


Решение с более широкой областью применения - отредактировать запись terminfo для вашего терминала, чтобы она не включала альтернативные последовательности управления экраном. Записи terminfo формируют базу данных, которая сообщает программам, какие управляющие последовательности отправлять терминалу для создания определенных эффектов (перемещение курсора, очистка экрана, удаление части текущей строки и т. Д.). Отредактировав запись terminfo, которую использует ваш терминал, вы можете организовать «игнорирование» для всех программ, использующих terminfo, о том, что последовательности управления «альтернативным экраном» вообще существуют.

Из списка контрольных последовательностей для xterm видно, что интересующие контрольные последовательности (для xterm- подобных терминальных эмуляторов)

  • включить альтернативный экран: ESC [ ? 47 h(аналогично для 1047 и 1049) и
  • восстановить нормальный экран: ESC [ ? 47 l(аналогично для 1047 и 1049).

Эти коды, скорее всего, присутствуют в переменных terminfo smcupи rmcup. Быстрый и грязный способ вырезать эти переменные для текущего TERM может выглядеть следующим образом:

infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo

Этот метод довольно грубый и, конечно, не будет работать для всех терминалов, но, вероятно, он будет работать для большинства xterm- подобных эмуляторов терминалов. В идеале вы должны исследовать значения в smcupи rmcupпеременные записи terminfo для вашего терминала и консервативно редактировать их, чтобы предотвратить нежелательное поведение. На приведенной выше странице обсуждения / решения есть «предварительно приготовленный» файл terminfo, который вы можете использовать вместо того, чтобы взламывать свой собственный (но что в этом хорошего?).


10

Вам нужно установить , $MANPAGERчтобы /usr/bin/less -isX, заменив путь , где lessнаходится как требуется. Важной частью является -X; -isявляется набор по умолчанию передается меньше.


9

Предполагая, что ваш пейджер lessустановлен, установите переменную окружения LESSдля включения «X». Например мой это:

LESS="-iMFXRj4a"

Вы можете установить это в своем ~/.bashrcфайле

export LESS="-X"

и включите любые другие варианты, которые у вас есть, или добавьте те, которые вам нравятся.


4

Другой трюк - менее элегантный, чем другие ответы - это:

man what | more

(По крайней мере, это работает на MacOS X, который обычно достаточно похож, чтобы быть действительным.)


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.