Solution
A less manual version of knitatoms' answer
combined with Alex Marteilli's answer
works quite well: pass the +Gg
option to less
via its pager option.
For example, try
man -P 'less -s -M +Gg' man
This can be effected permanently by putting
export MANPAGER='less -s -M +Gg'
in one of your shell configuration files (above syntax is for Bash and
ZSH). Now, for example, man man
displays the percentage as you
wanted!
Warning
You should not put the +Gg
in the LESS
variable! For example,
doing
export LESS='-M +Gg'
will cause problems when reading very large files. For example,
yes | LESS='-M +Gg' less
does not work very well ...
Explanation
As other answers have explained, the problem is that less
can't say
what percent into the file you are until it knows how long the file
is, and it doesn't read to the end of the file by default when reading
from a pipe.
From the OPTIONS
section of 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.
The g
means "return to the beginning of file".
The -M
tells less
to show a "long prompt", which in particular includes the percentage. But it seems man
makes less
include the percentage automatically, even if you leave -M
out, if man
detects a "recent version of less
". See the -r prompt
section of man man
for more info.
From the man man
(in 2013):
-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.
Note that it says -s
is the default option used with the pager by man
. In 2022 I no longer see the -s
mentioned here in man man
, but I don't see any harm in leaving it in (it squashes consecutive blank lines).
man
, not the executableman
. – Elene