tmux - faites défiler vers le haut / bas avec Maj + page haut / bas dans un volet

14

Je voudrais pouvoir faire défiler vers le haut / bas dans un volet donné avec la même liaison de touches que xterm, c'est-à-dire MAJ + Page Haut / Bas.

Par exemple, si la fenêtre tmux est divisée en 2 volets verticaux, je pourrais faire défiler l'un des deux avec le clavier tandis que l'autre ne défile pas.

C'est possible ?

Voici mon 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
user1610662
la source

Réponses:

8

Pour faire défiler vers le haut, vous pouvez faire:

bind -n S-Pageup copy-mode -u

Ce qui précède ne semble pas fonctionner sur un Mac, j'ai donc testé avec:

bind -n S-Up copy-mode -u

Pour autant que je sache, après avoir appuyé sur S-Up, vous pouvez continuer à utiliser S-Up ou simplement une page vers le haut pour continuer à faire défiler vers le haut. Vous pouvez utiliser la page vers le bas pour faire défiler vers le bas. Ce ne sont pas exactement les raccourcis clavier que vous recherchiez, alors je m'excuse. Cela devrait vous rapprocher de votre objectif, j'espère.

ÉDITER:

Je viens de tester avec:

bind -n Pageup copy-mode -u

et cela vous permet d'utiliser uniquement la page vers le haut et la page vers le bas.

mjwhitta
la source
Bien que bind -n Pageup copy-mode -ucela me permette d'appuyer sur PgUp pour passer en mode copie et faire défiler vers le haut, je ne peux pas ensuite utiliser PgUp pour continuer à faire défiler vers le haut.
apocryphalauthor
6

Oui, je sais que cette question est ancienne, mais elle n'est pas si loin dans les résultats de Google et j'ai juste passé beaucoup de temps à découvrir comment le faire simplement parce que presque aucun résultat Google ne contenait de réponse, seulement des questions.

AFAIK un seul volet défile en mode copie. Pour passer en mode copie, vous pouvez utiliser prefix-[puis faire défiler en utilisant C-upet C-downou vous pouvez définir vos propres raccourcis clavier (dans le fichier de configuration) qui en mode emacs ressemble à ceci:

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

Cela définira les combinaisons de touches Shift+ PageUpet Shift+ PageDownpour faire défiler une demi-page respectivement vers le bas en mode copie . Lorsque vous utilisez vi-mode, vous devez le changer en quelque chose comme ceci:

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

Maintenant, si vous voulez passer en mode copie "automatiquement" et que vous ne voulez pas l'utiliser, prefix-[vous pouvez ajouter la ligne suivante à votre fichier de configuration:

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

Cela ouvrirait le mode copie et ferait défiler une page (complète) vers le haut lorsque vous appuyez sur Shift+ PageUpen mode Édition (mode par défaut). Pour ouvrir uniquement le mode copie sans faire défiler une page, omettez simplement le -u. Et si vous voulez faire défiler une page entière vers le haut / bas ou juste une ligne, vous pouvez utiliser les mots-clés page-up, scroll-upou utiliser l'une des commandes

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

pour voir une liste complète des options à utiliser et des raccourcis clavier par défaut.

Max Matti
la source
1
Je ne sais pas si c'est la version de tmuxje suis en cours d'exécution ou non, mais le -tparamètre n'est pas reconnu (cependant, -T fonctionne) Typo possible?
mdip
Très probablement une faute de frappe, mais non, cela n'a pas de sens avec -n, car il s'agit d'un raccourci pour-T root
smido
4

Voici une solution qui devrait simplement fonctionner avec votre mémoire musculaire, vous permettant d'utiliser Shift+ PageUpet Shift+ PageDowncomme vous le feriez dans le terminal normal.

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

Si vous utilisez Vim, vous voudrez activer conditionnellement cette liaison ou cela gâchera les choses lorsque vous utilisez PageUp, etc. dans vim à l'intérieur de 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

(Merci à la solution de @ mjwhitta, que cela affine)

Jack Senechal
la source
+1 mais bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"était nécessaire pour que Pageup continue de faire défiler plusieurs pressions.
79E09796