6

На моем компьютере с Debian, less всегда открывает альтернативный экран, чтобы показать материал.

Это раздражает, если отображаются только 2 или 3 строки. Я бы хотел less :

  • работать как пейджер, если есть больше, чем скрин информации

  • и работать как cat , если нет.

Очевидно, у less есть флаг -F для случаев "одного экрана":

-F или --quit-if-one-screen

Вызывает автоматическое завершение меньше, если весь файл может отображаться на первом экране.

Но в моем случае он просто выходит снова, и информация не отображается. Это больше похоже на cat /dev/null и, следовательно, не очень полезно.

У кого-нибудь есть идеи, как добиться такого less поведения?

3 ответа3

4

Вы можете комбинировать -F с -X , что отключает последовательность инициализации terminfo.

export LESS=-FX

Это имеет (не) преимущество, заключающееся в том, что less не очищает отображаемый текст при выходе, независимо от длины файла.

2

Вы можете создать небольшой скрипт-обертку, например:

#!/bin/bash
if (( $(wc -l < "$1") < ${LINES:-20} ))
then
        cat "$1"
else
        less "$1"
fi

Если вы создадите это в /usr/local/bin или ~/bin как файл с именем что-то вроде less2 (вы можете использовать очень короткое имя, например l для простоты ввода), и убедитесь, что оно исполняется с помощью chmod a+x /usr/local/bin/less2 , вы можете использовать его вместо less для команд в форме less filename , то есть less2 filename (или l filename).

Это не будет работать, если вы пропускаете выходные данные другой команды через less , или если вы указываете опцию (и) или несколько имен файлов.

Без сомнения, будет возможно сделать то же самое без дополнительного файла сценария, определив псевдоним функцию, если вы предпочитаете.

2

Как упоминалось в grawity, вы можете передать -F -X для достижения этой цели, но это означает, что less будет оставлять много текста в вашем терминале прокрутки (и это может быть даже не в порядке, если вы будете прыгать вокруг текста less). less выдачи ничего, когда вы только передаете -F - известная проблема # 303.

Вместо этого вы можете использовать скрипт-обертку. Для медленных входов, таких как git log -Gregex , вы хотите:

A) строки, которые должны появиться на главном экране по мере их появления, затем переключитесь на альтернативный экран, когда необходима прокрутка (поэтому первые выходные строки $LINES всегда будут появляться в вашем прокрутке); если так, продолжайте со вторым из ответов Жиля на подобный вопрос.

B) строки, которые должны появиться на альтернативном экране, но выйдите из альтернативного экрана и распечатайте строки на главном экране, если прокрутка окажется ненужной (таким образом, никакой вывод не будет отображаться в вашем прокрутке, если требуется прокрутка); если так, посмотрите на мой ответ на подобный вопрос.

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