如果最初触发 select-pane 命令的方向没有剩余窗格,是否可以禁用导致选择 tmux 窗口另一侧窗格的行为?
如果没有,有没有办法确定特定方向是否存在其他窗格?
如果 tmux 窗口没有 (v)split 活动窗口并且触发了 select-pane 命令,则会抛出一条错误消息 - 这是预期的行为。
谢谢您的回复
答案1
将其添加到您的~/.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"
基本上,这应该与 tmux 版本 2.6 + 一起运行(之后他们添加了 pane_at_top、pane_at_bottom、pane_at_left、pane_at_right 环境变量。对于 tmux < v2.6,我不完全确定如何实现它。
此外,如果您想启动自定义 shell,请通过set-option -g default-command fish
(或 zsh 或 csh 或其他)来完成。作为替代方案,如果您想使用非 bash shell 作为 tmux 默认 shell,请将其设置为 ( set-option -g default-shell
),然后您可以在您选择的 shell 脚本中编写上述逻辑。然而,(就像我的情况一样)使用某些 shell 并不能为您提供单行 if 命令的便利(或者可能只是我对某些 shell 不够了解,或者可能是多行在运行中工作)壳。
答案2
感谢 Gilgamesh Skytrooper 将问题发布在github。这是一个可以处理多个会话并且不调用 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
如果您想先点击前缀 ( ),请删除它,然后根据您的喜好C-b
更改绑定。M-[awds]