tmux select-pane -LDUR 命令 - 禁用自动循环行为

tmux select-pane -LDUR 命令 - 禁用自动循环行为

如果最初触发 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 不够了解,或者可能是多行在运行中工作)壳。

来源:我启动的 github 问题线程

答案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]

相关内容