Как прокручивать большой файл данных, сохраняя заголовок

Предположим, у меня есть большой файл данных, который переполняет экран как в вертикальном, так и в горизонтальном направлении. Как я могу просмотреть этот файл, в то время как строки заголовка остаются на экране?

На данный момент я использую less -S , так что могу красиво прокручивать свой файл по горизонтали и по вертикали. Однако при прокрутке строки заголовка, очевидно, исчезают. Есть ли способ уменьшить их использование?

Альтернативой является использование vim в режиме разделения экрана с помощью :set nowrap . Однако теперь, если я прокручиваю по горизонтали, верхнее окно не прокручивается одинаково ( :windo set scrollbind работает только для вертикальной прокрутки, насколько я знаю).

Если вы знакомы с vim, это, вероятно, лучший вариант для вас. Вы можете включить привязку горизонтального прокрутки, добавив ее в 'scrollopt' :

 set scrollopt+=hor 

Таким образом, с помощью vim -u NONE вы получаете желаемое поведение:

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

Вы можете настроить 'sidescroll' и 'sidescrolloff' чтобы изменить количество пропущенных столбцов и расстояние от 'sidescrolloff' кромки соответственно.

На терминалах, поддерживающих настройку области прокрутки:

 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 

или, для заголовков длиннее одной строки:

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

Если вы хотите выполнить вывод команды вместо файла:

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

или используйте -t если это необходимо. Обратите внимание, что вам может понадобиться использовать unbuffer чтобы ваш вывод команды появился немедленно.

Вы можете использовать -D чтобы отключить отображение строк состояния для форм -wh (это победит цель формы -t ).

Ответ Тора не упоминал об отключении вертикального «прокрутки», что заставляет окна прокручивать вертикально. Поэтому для меня полное решение вставляет это в 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)" Cj tmux split-window -v tmux resize-pane -t 0 -y 2 tmux send-keys -t 1 "tail -n+2 $1|less -S" Cj tmux attach -t main 

Это расширение ответа user80519 на разбиение окна tmux . Сохранить как hless.sh , сделать его исполняемым и использовать его как

 hless.sh file