tmux: desplácese hacia arriba / abajo con shift + página arriba / abajo en un panel

14

Me gustaría poder desplazarme hacia arriba / abajo en un panel determinado con la misma combinación de teclas que xterm, es decir, MAYÚS + Página arriba / abajo.

Por ejemplo, si la ventana tmux se divide en 2 paneles verticales, podría desplazarme por uno de los dos con el teclado mientras que el otro no se desplaza.

Es posible ?

Aquí está mi 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
usuario1610662
fuente

Respuestas:

8

Para desplazarse hacia arriba puede hacer:

bind -n S-Pageup copy-mode -u

Lo anterior no parece funcionar en una Mac, así que probé con:

bind -n S-Up copy-mode -u

Por lo que puedo decir, después de presionar S-Up, puede continuar usando S-Up o simplemente avanzar una página para seguir desplazándose hacia arriba. Puede usar la página hacia abajo para desplazarse hacia abajo. Estas no son exactamente las combinaciones de teclas que estaba buscando, así que me disculpo. Espero que esto te acerque más a tu objetivo.

EDITAR:

Acabo de probar con:

bind -n Pageup copy-mode -u

y esto le permite usar solo página arriba y página abajo.

mjwhitta
fuente
Si bien bind -n Pageup copy-mode -ume permite presionar PgUp para ingresar al modo de copia y desplazarme hacia arriba, no puedo usar PgUp para seguir desplazándome hacia arriba.
apocryphalauthor
6

Sí, sé que esta pregunta es antigua, pero no está tan abajo en los resultados de Google y pasé mucho tiempo para descubrir cómo hacerlo simplemente porque casi ningún resultado de Google contenía una respuesta, solo preguntas.

AFAIK solo se desplaza un panel cuando está en modo copia. Para entrar en el modo de copia se puede utilizar prefix-[y luego desplazarse usando C-upy C-downo puede establecer sus propias combinaciones de teclas (en el archivo de configuración), que en apariencia emacs-modo como este:

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

Esto configurará las combinaciones de teclas Shift+ PageUpy Shift+ PageDownpara desplazarse media página hacia arriba, respectivamente, hacia abajo cuando esté en modo copia . Cuando usa el modo vi, debe cambiarlo a algo como esto:

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

Ahora, si desea ingresar al modo de copia "automáticamente" y no desea utilizarlo prefix-[, puede agregar la siguiente línea a su archivo de configuración:

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

Esto abriría el modo de copia y desplazaría una página (completa) hacia arriba al presionar Shift+ PageUpen el modo de edición (modo predeterminado). Para abrir solo el modo de copia sin desplazarse hacia arriba en una página, simplemente omita el -u. Y si desea desplazarse una página completa hacia arriba / abajo o simplemente una línea que usted puede utilizar las palabras clave page-up, scroll-upo utilizar uno de los comandos

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

para ver una lista completa de opciones para usar y combinaciones de teclas predeterminadas.

Max Matti
fuente
1
No estoy seguro de si es la versión de la tmuxque estoy ejecutando o no, pero el -tparámetro no se reconoce (sin embargo, -T funciona) ¿Posible error tipográfico?
mdip
Lo más probable es un error tipográfico, pero tampoco que no tiene sentido junto con -n, ya que esto es un atajo para-T root
smido
4

Aquí hay una solución que debería funcionar con su memoria muscular, permitiéndole usar Shift+ PageUpy Shift+ PageDowncomo lo haría en la terminal normal.

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

Si está utilizando Vim, querrá habilitar condicionalmente este enlace o lo estropeará cuando lo use PageUp, etc. en vim dentro 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

(Gracias a la solución de @ mjwhitta, que esto refina)

Jack Senechal
fuente
+1 pero bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"era necesario para que Pageup continuara desplazándose hacia arriba en múltiples prensas.
79E09796