How to make Less indicate location in percentage

Теперь я хочу показать знак процента также при запуске, например, команды

man emacs

Если вы запустите его, вы получите, например, "байт 3300".

Ответ Алекса подсказывает мне, что нам нужно сделать отдельную функцию оболочки

man "$1"| col -b > /tmp/manual
less /tmp/manual

где $1 относится к первому параметру.


Новая проблема в потоке. Спасибо Юлии за решительный ход!

6 ответов

Решение

Решение

Менее ручная версия ответа трикотажа в сочетании с ответом Алекса Мартейли работает довольно хорошо: передайте +Gg возможность less через опцию пейджера.

Например, попробуйте

man -P 'less -s -M +Gg' man

Это может быть сделано навсегда путем

export MANPAGER='less -s -M +Gg'

в одном из ваших файлов конфигурации оболочки (синтаксис выше для Bash и ZSH). Теперь, например, man man отображает процент, как вы хотели!

Предупреждение

Вы не должны ставить +Gg в LESS переменная! Например, делать

export LESS='-M +Gg'

вызовет проблемы при чтении очень больших файлов. Например,

yes | LESS='-M +Gg' less

не очень хорошо работает...

объяснение

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

От OPTIONS раздел man less:

+      If  a command line option begins with +, the remainder of that
       option is taken to be an initial command to less.   For  exam‐
       ple, +G tells less to start at the end of the file rather than
       the beginning, and +/xyz tells it to start at the first occur‐
       rence of "xyz" in the file.  As a special case, +<number> acts
       like +<number>g; that is, it starts the display at the  speci‐
       fied  line  number (however, see the caveat under the "g" com‐
       mand above).  If the option starts with ++, the  initial  com‐
       mand  applies  to  every file being viewed, not just the first
       one.  The + command described previously may also be  used  to
       set (or change) an initial command for every file.

g означает "возврат в начало файла".

От man man:

-P pager, --pager=pager
       Specify which output pager to use.  By default, man uses pager
       -s.  This option overrides the $MANPAGER environment variable,
       which in turn overrides the $PAGER environment  variable.   It
       is not used in conjunction with -f or -k.

       The value may be a simple command name or a command with argu‐
       ments, and may use shell quoting (backslashes, single  quotes,
       or  double  quotes).  It may not use pipes to connect multiple
       commands; if you need that, use a wrapper  script,  which  may
       take  the file to display either as an argument or on standard
       input.
export LESS="-m"

В целом, LESS Переменная окружения может содержать параметры, эквивалентные флагам командной строки, которые вы могли бы явно передать при запуске less - здесь -m вариант, который говорит ему, чтобы предложить более богато (в том числе процент, как вы просили). Вы также можете передать более одной опции в пределах одной переменной среды, заканчивая каждый $, Для получения дополнительной информации см . Справочную страницу Less.

Редактировать: конечно, возможно (в зависимости от того, как вы используете меньше, например, если вы отправляете по нему, а не вызываете его в файле), что меньше не знает общий размер, который будет отображаться, и в этом случае конечно, он не может показать% - в этом случае он подскажет, какой маленькой информацией он обладает, например, сколько текста он пока показал. Например, man действительно использует less таким образом, по трубам.

Так что, если ваша конкретная потребность состоит в том, чтобы увидеть% в man (а не при звонке less непосредственно в файле) вам нужно использовать "альтернативный пейджер" (переменная окружения MANPAGER или переключатель -P на man командная строка), который представляет собой простой скрипт, который сохраняет manвыводится во временный файл, а затем использует less на последнем. (Это может потерять собственную "раскраску" человека, если вы не будете играть дальше, углубляться в трюки и т. Д. И т. Д. - аналогично, вы можете использовать опцию "предварительно отформатировать страницы") man и распакуйте такую ​​предварительно отформатированную страницу в временный файл для запуска lessи т. д., но это начинает становиться несколько сложным "простым сценарием";-).

Чтобы добавить к ответу Алекса Мартелли:

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

-m<Enter>

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

Это особенно полезно для опций, которые необходимо изменить во время выполнения, например, -S (сворачивание строки вкл / выкл).

В Linux я просто иду в конец справочной страницы с помощью Shift+G, а затем возвращаюсь в начало с помощью g. (Или вы можете вернуться к своей предыдущей позиции с помощью '').

Меньше, чем достаточно информации, чтобы отобразить процент того, как далеко через файл вы находитесь. (Возможно, вам придется набрать -M чтобы получить длинную подсказку.)

Это что-то вроде хака, но только два нажатия клавиш. Не уверен, что это работает на OS/X.

С живой less время выполнения я использовал -M,

Это " -M Введите "на : подскажите с меньшим пробегом.

С действительно большими буферами мне также пришлось идти до конца, чтобы "обнаружить" их размер. Конец и обратно домой.


Примечание. Я бы опубликовал комментарий к ответу @sleske, но, если вспомнить, комментарии не поддерживают <kbd>Keyboard<kbd> теги.

У меня есть это в моей среде. Это будет печатать <filename> - Lines X-Y of Z внизу, или, по крайней мере, столько информации, сколько имеется.

export LESS='-P?f%f - .?ltLine?lbs. %lt?lb-%lb.?L of %L.:?pt%pt\%:?btByte %bt:-...'
Другие вопросы по тегам