Aggiungi questo al tuo ~/.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"
Fondamentalmente, questo dovrebbe funzionare con le versioni tmux 2.6 + (dopo di che hanno aggiunto le variabili di ambiente pane_at_top, pane_at_bottom, pane_at_left, pane_at_right. Per tmux
Inoltre, se vuoi lanciare una shell personalizzata, fallo tramite
Fonte:thread github Issues che ho avviato
Grazie a Gilgamesh Skytrooper per aver postato il problema su github. Ecco una versione semplice che può funzionare con più sessioni e non richiama un sottoprocesso della shell.
Rimuovi set-option -g default-command fish
(o zsh o csh o qualsiasi altra cosa). In alternativa, se vuoi usare una shell non bash come shell predefinita di tmux, impostala come tale (set-option -g default-shell
) e quindi puoi codificare la logica sopra nello script di shell di tua scelta. Tuttavia, (come nel mio caso) l'uso di determinate shell non ti dà la comodità di comandi if di una riga (o potrebbe essere che non ne so abbastanza su determinate shell, o forse più righe funzionano in run- guscio.
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
se vuoi premere il prefisso (C-b
) prima, e cambia le associazioni M-[awds]
a tuo piacimento.