web-dev-qa-db-ja.com

ヘッダーを維持しながら大きなデータファイルをスクロールする方法

画面に垂直方向と水平方向の両方でオーバーフローする大きなデータファイルがあるとします。ヘッダー行を画面に表示したまま、このファイルを参照するにはどうすればよいですか?

差し当たり、less -Sを使用しているので、ファイルを水平および垂直にうまくスクロールできます。ただし、下にスクロールすると、ヘッダー行が明らかに消えます。これらをより少なく使用する方法はありますか?

もう1つの方法は、:set nowrapを使用して、分割画面モードでvimを使用することです。ただし、水平方向にスクロールすると、上部のウィンドウが同じようにスクロールしません(:windo set scrollbindは、私の知る限り、垂直方向のスクロールでのみ機能します)。

19
Bernhard

Vimに慣れている場合は、おそらくこれが最適なオプションです。 'scrollopt'を変更すると、水平スクロールバインドのみを有効にできます。

set scrollopt=hor

したがって、vim -u NONEを使用すると、次のように目的の動作が得られます。

:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind

'sidescroll''sidescrolloff'を調整して、スキップする列の数とEdgeのスキップからの距離をそれぞれ変更することができます。

11
Thor

スクロール領域の設定をサポートする端末:

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"
)

zshまたはbashのようなシェルが$COLUMNSおよび$LINES端末のサイズに基づく変数)。

18

これを試してください(インストールする必要があります multitail ):

multitail -du -t "$(head -n 1 filename)" filename

または、1行より長いヘッダーの場合:

multitail -wh 2 -l "head -n 2 filename" filename

ファイルの代わりにコマンド出力を追跡する場合:

multitail -wh 2 -l "command | head -n 2" -l command

または、必要に応じて-tを使用します。 unbuffer を使用する必要がある場合があるので、コマンドの出力がすぐに表示されることに注意してください。

-Dを使用して、-whフォームのステータス行の表示を無効にすることができます(-tフォームの目的を無効にします)。

トールの回答では、両方のウィンドウを垂直方向にスクロールさせる垂直方向の「scrollopt」を無効にすることについては触れられていません。だから私にとって完全な解決策はこれをvimに貼り付けることです:

:set scrollopt+=hor
:set scrollopt-=ver
:set nowrap
:1split
:windo set scrollbind
2
tomasz

これは私がtmuxで得た限りです:

#!/bin/bash

tmux new-session -s main -n 'w1' -d
tmux send-keys -t main:w1.0 "tail -f <(head -n1 $1)" C-j
tmux split-window -v
tmux resize-pane -t 0 -y 2
tmux send-keys -t 1 "tail -n+2 $1|less -S" C-j
tmux attach -t main

これは、tmuxウィンドウ分割用の ser80519の回答 の拡張です。 hless.shとして保存し、実行可能にして、次のように使用します

hless.sh file
1
Saddy