默认情况下,tmux 会越过窗格的边缘。例如,假设有两个窗格,pane 1
和pane 2
。假设你在 ,pane 1
并且你这样做了Ctrl+b →,你就在pane 2
。如果您再次这样做Ctrl+b →,您将再次处于pane 1
。如何禁用该功能,以便当我从最后一个窗格导航时,我不会去任何地方?
答案1
这有点麻烦,但可能对你来说已经足够了。从版本 2.3 开始,您可以找到每个窗格边框的 x 和 y 坐标。例如,display -p #{pane_right}
对于 80 列终端右侧边缘的窗格,其值为 79。如果您发出向右移动到下一个窗格的命令,而新窗格的pane_right
值为(例如)39,则您已向左移动,因此您需要使用 移回到上一个窗格select-pane -l
。
mytmux
您可以从 shell 脚本运行大多数 tmux 命令,因此在 PATH 中创建以下文件并使其可执行 ( chmod +x mytmux
):
#!/bin/bash
# https://unix.stackexchange.com/a/451473/119298
restrict(){
case $1 in
U) d=-U p=pane_top cmp=-gt ;;
D) d=-D p=pane_bottom cmp=-lt ;;
L) d=-L p=pane_left cmp=-gt ;;
R) d=-R p=pane_right cmp=-lt ;;
*) exit 1 ;;
esac
old=$(tmux display -p "#{$p}")
tmux select-pane "$d"
new=$(tmux display -p "#{$p}")
[ "$new" "$cmp" "$old" ] && tmux select-pane -l
exit 0
}
case $1 in
-restrict)shift
restrict "${1?direction}" ;;
esac
然后在您的中设置以下绑定~/.tmux.conf
:
bind-key -r -T prefix Up run-shell 'mytmux -restrict U'
bind-key -r -T prefix Down run-shell 'mytmux -restrict D'
bind-key -r -T prefix Left run-shell 'mytmux -restrict L'
bind-key -r -T prefix Right run-shell 'mytmux -restrict R'
例如,如果您想处理多个会话,则需要扩展它。
答案2
默认情况下,键PrefixArrow的绑定方式如下
bind-key -r -T prefix Up select-pane -U
bind-key -r -T prefix Down select-pane -D
bind-key -r -T prefix Left select-pane -L
bind-key -r -T prefix Right select-pane -R
该select-pane
函数没有一个选项告诉它“当您到达该方向的最后一个窗格时不要循环”。
查看执行的源代码select-pane
,看起来循环左/右和上/下是硬编码的,这意味着不太容易阻止它以这种方式运行。