Có một giải pháp sử dụng Vim.
Đầu tiên, chúng ta cần một macro Vim, sẽ thực hiện hầu hết công việc, tôi lưu nó vào ~/.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()
Thứ hai, để mô phỏng một máy nhắn tin, tôi cần phải gọi vim để nó sẽ:
- đọc đầu vào tiêu chuẩn
- nhưng nếu đối số được đưa ra trên dòng lệnh, hãy đọc bất cứ điều gì đến đó
- làm việc ở chế độ chỉ đọc
- bỏ qua tất cả các tập lệnh init, nhưng thay vào đó thực thi Ít macro được xác định ở trên
Tôi kết hợp điều này với nhau như kịch bản trợ giúp trong ~/bin/vimpager
:
#!/bin/bash
what=-
test "$@" && what="$@"
exec vim -u NONE -R -S ~/.vim/plugin/less.vim -c Less $what
Thứ ba, tôi cần ghi đè biến môi trường $ PAGER, nhưng chỉ cho psql (thêm cái này vào của tôi ~/.bash_aliases
):
if which vimpager &>/dev/null; then
alias psql='PAGER=vimpager psql';
fi