Agrega esto a tu ~/.tmux.conf
:
set-option -g default-shell /bin/bash
unbind Up
unbind Down
unbind Right
unbind Left
bind Up run-shell "if [ $(tmux display-message -p '#{pane_at_top}') -ne 1 ]; then tmux select-pane -U; fi"
bind Down run-shell "if [ $(tmux display-message -p '#{pane_at_bottom}') -ne 1 ] ; then tmux select-pane -D; fi"
bind Right run-shell "if [ $(tmux display-message -p '#{pane_at_right}') -ne 1 ]; then tmux select-pane -R; fi"
bind Left run-shell "if [ $(tmux display-message -p '#{pane_at_left}') -ne 1 ]; then tmux select-pane -L; fi"
Básicamente, esto debería ejecutarse con tmux versiones 2.6 + (después de lo cual agregaron las variables de entorno pane_at_top, pane_at_bottom, pane_at_left, pane_at_right. Para tmux
Además, si desea iniciar un shell personalizado, hágalo a través de
Fuente:hilo de problemas de github que comencé
Gracias a Gilgamesh Skytrooper por publicar el problema en github. Aquí hay una versión simple que puede funcionar con varias sesiones y no invoca un subproceso de shell.
Eliminar set-option -g default-command fish
(o zsh o csh o lo que sea). Como alternativa, si desea utilizar un shell que no sea bash como shell predeterminado de tmux, configúrelo como tal (set-option -g default-shell
) y luego puede codificar la lógica anterior en el script de shell de su elección. Sin embargo, (como fue en mi caso) el uso de ciertos shells no le brinda la comodidad de los comandos if de una sola línea (o podría ser que no sé lo suficiente sobre ciertos shells, o tal vez varias líneas funcionen en ejecución). concha.
bind -n M-a if -F '#{pane_at_left}' '' 'select-pane -L'
bind -n M-d if -F '#{pane_at_right}' '' 'select-pane -R'
bind -n M-w if -F '#{pane_at_top}' '' 'select-pane -U'
bind -n M-s if -F '#{pane_at_bottom}' '' 'select-pane -D'
-n
si desea presionar el prefijo (C-b
) primero, y cambie los enlaces M-[awds]
a tu gusto.