Přidejte toto do ~/.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"
V zásadě by to mělo běžet s tmux verzemi 2.6 + (poté přidali proměnné prostředí pane_at_top, pane_at_bottom, pane_at_left, pane_at_right. U tmux
Navíc, pokud chcete spustit vlastní shell, udělejte to pomocí
Zdroj:vlákno github Issues, které jsem založil
Děkujeme Gilgamesh Skytrooperovi za zveřejnění problému na githubu. Zde je jednoduchá verze, která může pracovat s více relacemi a nevyvolává subproces shellu.
Odebrat set-option -g default-command fish
(nebo zsh nebo csh nebo cokoliv jiného). Alternativně, pokud chcete jako výchozí shell tmux použít shell bez bash, nastavte jej jako takový (set-option -g default-shell
) a poté můžete výše uvedenou logiku kódovat ve skriptu shellu dle vašeho výběru. Nicméně (jak tomu bylo v mém případě) použití určitých shellů vám neposkytuje pohodlí jednořádkových příkazů if (nebo to může být jen tím, že o určitých shellech nevím dost, nebo možná funguje více řádků za běhu- shell.
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
pokud chcete zadat prefix (C-b
) nejprve a změňte vazby M-[awds]
podle vašeho vkusu.