Є рішення за допомогою Vim.
По-перше, вам потрібен макрос Vim, який зробить більшу частину роботи. Збережіть це у ~/.vim/plugin/less.vim
:
" :Less
" turn vim into a pager for psql aligned results
fun! Less()
set nocompatible
set nowrap
set scrollopt=hor
set scrollbind
set number
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
wincmd j
execute 'norm! 2^E'
" hide statusline in lower window
set laststatus=0
" hide contents of upper statusline. editor note: do not remove trailing spaces in next line!
set statusline=\
" 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
endfun
command! -nargs=0 Less call Less()
По-друге, для емуляції пейджера вам потрібно викликати vim, щоб він:
- читати стандартне введення
- але якщо аргумент наведено в командному рядку, прочитайте все, що там приходить
- працювати в режимі лише для читання
- пропустити всі скрипти init, але замість цього виконати Менш макрос, визначений вище
Я поєднав це як помічний сценарій у ~/bin/vimpager
:
#!/bin/bash
what=-
test "$@" && what="$@"
exec vim -u NONE -R -S ~/.vim/plugin/less.vim -c Less $what
Зробіть сценарій виконуваним за допомогою chmod +x ~/bin/vimpager
.
По-третє, вам потрібно переосмислити програму пейджера для psql. Не встановлюйте змінну в PAGER
усьому світі, оскільки це може вплинути на інші програми, не тільки на psql. Натомість додайте це у свій ~/.psqlrc
файл:
\setenv PAGER ~/bin/vimpager
Вуаля ! Після перезавантаження вашого профілю, ви можете насолоджуватися результатом, який повинен вести себе , як і очікувалося (стрілка клавіші служать як по вертикалі , так і по горизонталі) і виглядають наступним чином : . Плюс уся сила Vim - саме там, якщо вам це потрібно.