I'm not an expert in Linux, but I was reading an introductory book and found that man pages use the PAGER environment variable to show the content of man pages. I checked printenv and didn't find any PAGER variable there.
However, since it's a binary, and the path to /usr/bin is in my path, there is a program called pager in Linux as well, and I think it's what is the default option for $PAGER.
Just out of curiosity I would like to know how to modify this PAGER variable. I tried adding one to my bashfile but that didn't work, couldn't find how pager can be changed.
And whats so special about pager - I expect any program that can read from stdin, or support piping stuff, can be pager, can vim be a pager?
Internally it seems the man just uses sed to send data to a defined PAGER variable because doing following works, but fails.
env PAGER=/usr/bin/nano man printf and I get an error, like following

nanois that it has no file to edit, but is getting the whole of the man page on stdin and attempting to treat it as editor commands. The junk you see is a consequence ofnanochanging the terminal modes to suit its use of thencursespackage.vimandnanothat you mention are meant to edit things, and man pages are not meant to be edited, so editors are probably bad choices in general. Here you'll additionally run into the problem that processing the man page outputs formatting characters that most editors just display as-is.vim(I don't havenanoinstalled so I can't try that) will also warn that input is not from a terminal, which leads to another defining characteristic, a pager must be able to handle two input streams, one for the data and one for your commands.