寻呼机程序喜欢less,能够重复前N行

fil*_*rem 15 command-line less pager

有没有办法让less程序在每个显示的页面上重复第一行(或前两行)?

有没有其他寻呼机程序可以做到这一点?

这将是一个杀手级应用程序内的数据库表的浏览,认为mysqlpsqlgqlplus...

请参阅本页底部的屏幕截图。我想重复标题行 + 水平 ascii 栏。

fil*_*rem 12

有一个使用 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()
Run Code Online (Sandbox Code Playgroud)

其次,要模拟寻呼机,您需要调用 vim 以便它:

  • 读取标准输入
  • 但是如果在命令行上给出参数,请阅读那里的任何内容
  • 在只读模式下工作
  • 跳过所有 init 脚本,而是执行上面定义的 Less 宏

我把它放在一起作为帮助脚本~/bin/vimpager

#!/bin/bash
what=-
test "$@" && what="$@"
exec vim -u NONE -R -S ~/.vim/plugin/less.vim -c Less $what
Run Code Online (Sandbox Code Playgroud)

使脚本可执行chmod +x ~/bin/vimpager

第三,您需要覆盖 psql 的寻呼程序。不要PAGER全局设置变量,因为它会影响其他程序,而不仅仅是 psql。相反,将其添加到您的~/.psqlrc文件中:

\setenv PAGER ~/bin/vimpager
Run Code Online (Sandbox Code Playgroud)

!重新加载您的配置文件后,您可以享受结果,其行为应符合预期(箭头键可垂直和水平浏览),如下所示:vimpager 在行动. 另外,如果您需要,Vim 的所有功能都在那里。