15

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

5 ответов5

16

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

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

Как описано на этой связанной странице, некоторые программы можно настроить, чтобы избежать использования альтернативного экрана. Опция -X для less является косвенным способом сделать это. Vim может быть настроен аналогичным образом, отключив переменные 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, который вы можете использовать вместо того, чтобы взламывать свой собственный (но что в этом хорошего?).

9

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

9

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

LESS="-iMFXRj4a"

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

export LESS="-X"

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

3

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

man what | more

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

1

человек что | Больше

Это отлично работает (Fedora).

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