tmux - gulir ke atas / bawah dengan shift + halaman atas / bawah menjadi panel

14

Saya ingin dapat menggulir ke atas / bawah ke panel yang diberikan dengan keybinding yang sama seperti yang dilakukan xterm, yaitu SHIFT + Page Up / Down.

Sebagai contoh, jika jendela tmux dibagi menjadi 2 panel vertikal, saya bisa menggulirkan salah satu dari keduanya dengan keyboard sedangkan yang lain tidak menggulir.

Apa itu mungkin ?

Inilah tmux.conf saya:

set -g status off
set -g prefix C-o
unbind C-b
bind C-o send-prefix

# settings -------------------------------------------------------------

setw -g utf8 on
setw -g xterm-keys on
set -g default-terminal "screen-256color"

set-option -g set-titles on
set-option -g set-titles-string '[#S:#I #H] #W'

# auto-set window title
setw -g automatic-rename
setw -g aggressive-resize on

# vim keybinds
set-option -g status-keys vi
set-window-option -g mode-keys vi

# scroll inside the current pane
#bind-key k page-up
#bind-key l page-down

# mouse
set -g mode-mouse on
setw -g mouse-select-window on
setw -g mouse-select-pane on

# scrollback buffer n lines
set -g history-limit 100000

# fixes shift-pageup/shift-pagedown
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
set -g visual-activity on

# faster key repetition
set -s escape-time 0

# activity alert
setw -g monitor-activity on
set -g visual-activity on

# alt+directions navigates through panes
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D
pengguna1610662
sumber

Jawaban:

8

Untuk menggulir ke atas, Anda dapat melakukan:

bind -n S-Pageup copy-mode -u

Tampaknya di atas tidak berfungsi pada Mac, jadi saya diuji dengan:

bind -n S-Up copy-mode -u

Sejauh yang saya tahu, setelah menekan S-Up, Anda dapat terus menggunakan S-Up atau hanya page-up untuk terus menggulir ke atas. Anda dapat menggunakan halaman-bawah untuk menggulir ke bawah. Ini bukan ikatan utama yang Anda cari, jadi saya minta maaf. Saya harap ini lebih dekat dengan tujuan Anda.

EDIT:

Saya baru saja menguji dengan:

bind -n Pageup copy-mode -u

dan ini memungkinkan Anda untuk menggunakan hanya page-up dan page-down.

mjwhitta
sumber
Meskipun bind -n Pageup copy-mode -umemungkinkan saya untuk menekan PgUp untuk masuk ke mode salin dan gulir ke atas, saya tidak bisa menggunakan PgUp untuk terus menggulir ke atas.
apocryphalauthor
6

Ya saya tahu pertanyaan ini sudah lama tetapi tidak terlalu jauh di hasil google dan saya hanya menghabiskan banyak waktu untuk mencari tahu bagaimana melakukannya hanya karena hampir tidak ada hasil google berisi jawaban, hanya pertanyaan.

AFAIK hanya satu panel yang menggulir ketika dalam mode salin. Untuk masuk ke mode salin, Anda dapat menggunakan prefix-[dan kemudian gulir menggunakan C-updan C-downatau Anda dapat mengatur keybindings Anda sendiri (dalam file konfigurasi) yang dalam mode emacs terlihat seperti ini:

bind-key -t emacs-copy -n S-PPage halfpage-up
bind-key -t emacs-copy -n S-NPage halfpage-down

Ini akan mengatur kombinasi tombol Shift+ PageUpdan Shift+ PageDownuntuk menggulir masing-masing setengah halaman ke atas saat dalam mode salin . Saat Anda menggunakan mode-vi Anda perlu mengubahnya menjadi seperti ini:

bind-key -t vi-copy -n S-PPage halfpage-up
bind-key -t vi-copy -n S-NPage halfpage-down

Sekarang jika Anda ingin memasukkan mode salin "secara otomatis" dan tidak ingin menggunakan prefix-[Anda dapat menambahkan baris berikut ke file konfigurasi Anda:

bind-key -t root -n S-PPage copy-mode -u

Ini akan membuka mode salin dan gulir halaman (penuh) ke atas saat menekan Shift+ PageUpdalam Mode Edit (mode default). Untuk hanya membuka mode salin tanpa menggulung halaman, cukup abaikan -u. Dan jika Anda ingin menggulir halaman penuh ke atas / bawah atau hanya satu baris, Anda dapat menggunakan kata kunci page-up, scroll-upatau menggunakan salah satu perintah

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy

untuk melihat daftar opsi lengkap untuk digunakan dan ikatan kunci default.

Max Matti
sumber
1
Saya tidak yakin apakah ini versi tmuxsaya sedang menjalankan atau tidak, tetapi -tparameternya tidak dikenali (namun, -T berfungsi) Kemungkinan salah ketik?
mdip
Kemungkinan besar kesalahan ketik tapi juga tidak masuk akal -n, karena ini adalah jalan pintas untuk-T root
smido
4

Inilah solusi yang seharusnya hanya bekerja dengan memori otot Anda, memungkinkan Anda untuk menggunakan Shift+ PageUpdan Shift+ PageDownseperti yang Anda lakukan di terminal normal.

bind -n Pageup copy-mode -u
bind -n S-Pageup copy-mode -u
bind -n S-Pagedown send-keys Pagedown

Jika Anda menggunakan Vim, Anda ingin mengaktifkan ikatan ini secara kondisional atau itu akan mengacaukan semuanya saat Anda gunakan PageUp, dll dalam vim di dalam tmux.

is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\\S+\\/)?g?(view|n?vim?x?)(diff)?$'"
bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pagedown send-keys Pagedown

(Berkat solusi @ mjwhitta, yang disempurnakan)

Jack Senechal
sumber
+1 tetapi bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"diperlukan untuk mendapatkan Pageup untuk terus menggulir ke atas pada banyak penekanan.
79E09796