Есть ли способ выйти «меньше» без очистки экрана?

68

Относительно часто я чувствую, lessчто хочу выйти, но оставить то, что я просматривал на экране, чтобы вернуться к нему. Есть какой-либо способ сделать это? Обходные?

(Мой текущий обходной путь - выйти, а затем использовать more. Поэтому любой обходной путь, который лучше этого, приветствуется. Идеальным было бы то, что я могу использовать, как только я уже внутри less, возможно, с настройкой оболочки или некоторыми сценариями.)

Мой рабочий стол - OSX, но я использую серверы RHEL и Ubuntu.

Стив Беннетт
источник
1
Чтение длинного вывода (как в git diffили git log) в less -Xзаймет буфер прокрутки в моем терминале и вытеснит большую часть предыдущего вывода. Я был бы рад, если lessбы мог просто выйти с последним выводом на экран во время выхода; т.е. не более одной страницы буфера прокрутки будет занято после выхода less. Есть идеи?
Musiphil
Кстати, -Rобычно это более безопасный выбор, чем -r.
Musiphil
Благодарю. Для тех, кому интересно:-R is "Like -r, but only ANSI "color" escape sequences are output in "raw" form. Unlike -r, the screen appearance is maintained correctly in most cases."
Стив Беннетт
@musiphil Возможно, -c?
Ванесса Фиппс
@ MatthewPhipps: я думаю -c, о том, как обновить экран, когда вы перемещаетесь внутри less.
Musiphil

Ответы:

68

На самом деле это функция используемого вами эмулятора терминала (xterm, gnome-терминал, konsole, screen). Альтернативный экран, или altscreen, запускается при запуске таких программ, как lessили vim. Этот альтернативный экран не имеет буфера истории и сразу выходит из программы при выходе из программы, возвращаясь к исходному экрану, который восстанавливает предыдущую историю содержимого окна и размещение.

Вы можете предотвратить lessзапуск на альтернативном экране, передав аргумент "-X".

less -X /path/to/some/file

Вы также можете передать «-X» как переменную окружения. Так что, если вы используете bash, поместите это в ~/.bashrc:

export LESS="-X"

Однако это не позволяет инициализировать и деинициализировать termcap (возможность терминала), поэтому другие представления при использовании lessмогут отображаться как отключенные.

Другой вариант будет использовать screenи установить параметр altscreen offв вашем ~/.screenrc. lessне очистит экран и должен сохранить цветное форматирование. Предположительно tmuxбудет такой же вариант.

Эта запись в блоге описывает проблему и предлагает несколько различных решений, которые можно использовать gnome-terminalс переменным успехом.

Джордж М
источник
2
Отлично. Есть ли обратная сторона?
Стив Беннетт
2
Подождите, я уже обнаружил один - вывод git log(и, вероятно, других цветных команд) испорчен.
Стив Беннетт
1
@SteveBennett Это достаточно мало, я бы сделал его псевдонимом:alias les="/usr/bin/less -X"
бонсаив
4
Эй, я думаю, что я только что обнаружил противоядие от git logпроблемы выше export LESS="-r -X". (Не знаю , что побочные эффекты , которые являются ...)
Steve Bennett
5
Фактически, gitустанавливает LESSпеременную, FRSXесли она не установлена, когда он запускает пейджер, так что вы можете просто оставить LESSнеустановленной и lessавтоматически работать с -FRSX. Ищите core.pagerв git-config(1)для получения дополнительной информации.
Musiphil
4

Решение Джорджа не сработало для меня, но это решение сработало (из записи в блоге, указанной в его ответе).

  1. $ infocmp -I xterm > ~/xterm-noclear.src

  2. Редактировать ~ / xterm-noclear.src

    • измените имя во второй строке с «xterm» на «xterm-noclear» или как вам удобнее (также измените «xterm-debian», если он присутствует)

    • удалите инструкции 'smcup' и 'rmcup' (например, "smcup = \ E [? 1049h," и "rmcup = \ E [? 1049l,")

  3. $ mkdir ~/.terminfo

  4. $ tic ~/xterm-noclear.src (x / xterm-noclear должен появиться в вашем каталоге ~ / .terminfo)

  5. $ export TERM=xterm-noclear (теперь проверьте поведение less и, если все выполнено, добавьте строку директивы экспорта в ваш ~ / .profile)

(Я скопировал эти инструкции непосредственно из отклоненного редактирования @ jah ответа Джорджа.)

ПРЛ
источник
4

Я помню это так, less -SEXкогда мне нужно вывести вывод на экран, но не хочу переносить строки. Например, docker ps | less -SEXчто это делает это:

  • -S
    • Прокрутка вместо обтекания
    • Если вы уроните -E, вы можете использовать клавиши со стрелками для прокрутки
  • -E
    • Выход, когда вы достигнете EOF
  • -X
    • Предотвратить обмен местами / гашение
    • «Память» - это то, что я знаю, что делают S и E, поэтому это должна быть другая часть. (И наша причина для фиксации этой команды в памяти заключается в том, что мы хотим вывести (а не вводить интерактивный сеанс) распакованный вывод.

Если вы не можете вспомнить less -SEX, у вас не так много надежды. Просто повторяйте Google каждый раз, когда я думаю.

Бруно Броноски
источник
У парня проблемы, а вы предлагаете ему меньше секса?
Йоссико