画面に垂直方向と水平方向の両方でオーバーフローする大きなデータファイルがあるとします。ヘッダー行を画面に表示したまま、このファイルを参照するにはどうすればよいですか?
差し当たり、less -S
を使用しているので、ファイルを水平および垂直にうまくスクロールできます。ただし、下にスクロールすると、ヘッダー行が明らかに消えます。これらをより少なく使用する方法はありますか?
もう1つの方法は、:set nowrap
を使用して、分割画面モードでvim
を使用することです。ただし、水平方向にスクロールすると、上部のウィンドウが同じようにスクロールしません(:windo set scrollbind
は、私の知る限り、垂直方向のスクロールでのみ機能します)。
Vimに慣れている場合は、おそらくこれが最適なオプションです。 'scrollopt'
を変更すると、水平スクロールバインドのみを有効にできます。
set scrollopt=hor
したがって、vim -u NONE
を使用すると、次のように目的の動作が得られます。
:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind
'sidescroll'
と'sidescrolloff'
を調整して、スキップする列の数とEdgeのスキップからの距離をそれぞれ変更することができます。
スクロール領域の設定をサポートする端末:
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
端末のサイズに基づく変数)。
これを試してください(インストールする必要があります 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
これは私が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