There is a solution using Vim.
First, you need a Vim macro, which will do most of the work. Save it in
" turn vim into a pager for psql aligned results
execute 'above split'
" resize upper window to one line; two lines are not needed because vim adds separating line
execute 'resize 1'
" switch to lower window and scroll 2 lines down
execute 'norm! 2^E'
" hide statusline in lower window
" hide contents of upper statusline. editor note: do not remove trailing spaces in next line!
" arrows do scrolling instead of moving
nmap ^[OC zL
nmap ^[OB ^E
nmap ^[OD zH
nmap ^[OA ^Y
nmap <Space> <PageDown>
" faster quit (I tend to forget about the upper panel)
nmap q :qa^M
nmap Q :qa^M
command! -nargs=0 Less call Less()
Second, to emulate a pager, you need to invoke vim so that it will:
- read standard input
- but if argument is given on command line, read whatever comes there
- work in read-only mode
- skip all init scripts, but instead execute Less macro defined above
I put this together as helper script in
test "$@" && what="$@"
exec vim -u NONE -R -S ~/.vim/plugin/less.vim -c Less $what
Make the script executable with
chmod +x ~/bin/vimpager.
Third, you need to override pager program for psql. Do not set variable
PAGER globally, as it can affect other programs, not only psql. Instead, add this to your
\setenv PAGER ~/bin/vimpager
Voila! After reloading your profile, you can enjoy the result, which should behave as expected (arrow keys browse both vertically and horizontally) and look like this: . Plus, all the power of Vim is right there if you need it.