如何在保留标题的同时滚动大数据文件

Ber*_*ard 22 less vim pager scrolling

假设我有一些大数据文件,它们在垂直和水平方向都溢出了屏幕。如何浏览此文件,而标题行仍保留在屏幕上?

目前,我正在使用less -S,以便我可以很好地水平和垂直滚动我的文件。但是,向下滚动时,标题行显然消失了。有没有办法让这些使用更少?

另一种方法是vim在分屏模式下使用:set nowrap. 但是,现在如果我水平滚动,顶部窗口不会以相同的方式:windo set scrollbind滚动(据我所知仅适用于垂直滚动)。

Sté*_*las 19

在支持设置滚动区域的终端上:

tailf() ( # args: <file> [<number-of-header-lines>]
  trap 'tput csr 0 "$((LINES-1))"' INT
  tput csr "$((1+${2-1}))" "$((LINES-1))"
  tput clear
  {
    head -n"${2-1}"
    printf "%${COLUMNS}s\n" "" | tr ' ' =
    tail -n "$((LINES-1-${2-1}))" -f
  } < "$1"
)
Run Code Online (Sandbox Code Playgroud)

(假设 shell 类似zsh或根据终端的大小bash设置$COLUMNS$LINES变量)。

  • 伙计!那是敬虔的!对不起,控制不住自己。你能指引我到网页或命令或变量来实现以下功能吗? (2认同)

Tho*_*hor 13

如果您熟悉 vim,这可能是您的最佳选择。您可以通过更改启用水平滚动绑定'scrollopt'

set scrollopt=hor
Run Code Online (Sandbox Code Playgroud)

因此,使用vim -u NONE,您可以通过以下方式获得所需的行为:

:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind
Run Code Online (Sandbox Code Playgroud)

您可能需要分别调整'sidescroll''sidescrolloff'更改跳过的列数以及距边缘跳过开始的距离。


Den*_*son 6

试试这个(你需要安装multitail):

multitail -du -t "$(head -n 1 filename)" filename
Run Code Online (Sandbox Code Playgroud)

或者,对于超过一行的标题:

multitail -wh 2 -l "head -n 2 filename" filename
Run Code Online (Sandbox Code Playgroud)

如果要遵循命令输出而不是文件:

multitail -wh 2 -l "command | head -n 2" -l command
Run Code Online (Sandbox Code Playgroud)

-t适当使用。请注意,您可能需要使用,unbuffer以便您的命令输出立即出现。

您可以使用-D禁用-wh表单的状态行显示(这会破坏-t表单的目的)。