Пусть меньше работает, как кошка, если только один экран, полный текста

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

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

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

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

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

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

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

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

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

3 ответа

Решение

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

export LESS=-FX

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

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

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

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

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

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

#!/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или если вы укажете опцию (и) или несколько имен файлов.

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

Другие вопросы по тегам