tmux - scorre su / giù con maiusc + pagina su / giù in un riquadro


14

Vorrei essere in grado di scorrere verso l'alto / verso il basso in un determinato riquadro con lo stesso key binding di xterm, ovvero MAIUSC + Pagina su / giù.

Ad esempio, se la finestra di tmux è divisa in 2 riquadri verticali, potrei scorrere uno dei due con la tastiera mentre l'altro non scorre.

È possibile ?

Ecco il mio tmux.conf:

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

Risposte:


8

Per scorrere verso l'alto puoi fare:

bind -n S-Pageup copy-mode -u

Quanto sopra non sembra funzionare su un Mac, quindi ho testato con:

bind -n S-Up copy-mode -u

Per quanto ne so, dopo aver premuto S-Up, puoi continuare a usare S-Up o solo page-up per continuare a scorrere verso l'alto. È possibile utilizzare la pagina giù per scorrere verso il basso. Queste non sono esattamente le combinazioni di tasti che stavi cercando, quindi mi scuso. Questo dovrebbe avvicinarti al tuo obiettivo, spero.

MODIFICARE:

Ho appena provato con:

bind -n Pageup copy-mode -u

e questo ti permette di usare solo pagina su e pagina giù.


Mentre bind -n Pageup copy-mode -umi consente di premere PgUp per accedere alla modalità copia e scorrere verso l'alto, non posso quindi utilizzare PgUp per continuare a scorrere verso l'alto.
apocryphalauthor il

6

Sì, so che questa domanda è vecchia ma non è così lontana nei risultati di Google e ho appena trascorso molto tempo a scoprire come farlo semplicemente perché quasi nessun risultato di Google conteneva una risposta, solo domande.

AFAIK scorre solo un riquadro in modalità copia. Per andare in modalità copia puoi usare prefix-[e quindi scorrere usando C-upe C-downoppure puoi impostare le tue combinazioni di tasti (nel file di configurazione) che in modalità emacs si presenta così:

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

Questo imposterà le combinazioni di tasti Shift+ PageUpe Shift+ PageDownper scorrere mezza pagina verso l'alto rispettivamente verso il basso quando si è in modalità copia . Quando usi la modalità vi, devi cambiarla in qualcosa del genere:

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

Ora se si desidera accedere alla modalità di copia "automaticamente" e non si desidera utilizzare, prefix-[è possibile aggiungere la seguente riga al file di configurazione:

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

Ciò aprirà la modalità di copia e scorrerà una pagina (intera) verso l'alto quando si preme Shift+ PageUpin Modalità Modifica (modalità predefinita). Per aprire la modalità di copia solo senza scorrere una pagina, omettere semplicemente il -u. E se si desidera scorrere una pagina intera su / giù o semplicemente una linea è possibile utilizzare le parole chiave page-up, scroll-upo utilizzare uno dei comandi

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

per visualizzare un elenco completo di opzioni da utilizzare e combinazioni di tasti predefinite.


1
Non sono sicuro che sia la versione di tmuxSono in esecuzione o meno, ma il -tparametro non è riconosciuto (tuttavia, -T funziona) Possibile errore di battitura?
mdip,

Molto probabilmente un refuso ma anche non ha senso insieme -n, poiché questa è una scorciatoia per-T root
smido

4

Ecco una soluzione che dovrebbe funzionare con la tua memoria muscolare, permettendoti di usare Shift+ PageUpe Shift+ PageDowncome faresti nel normale terminale.

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

Se stai usando Vim, ti consigliamo di abilitare in modo condizionale questa associazione o PageUprovinerà le cose quando lo usi , ecc. In vim all'interno di 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

(Grazie alla soluzione di @ mjwhitta, che raffina)


+1 ma è bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"stato richiesto per ottenere Pageup per continuare a scorrere verso l'alto su più stampanti.
79E09796,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.