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

use*_*295 6 linux terminal tmux command panel

如果在最初触发 select-pane 命令的方向上没有剩余的窗格,是否可以禁用导致在 tmux 窗口的另一侧选择窗格的行为?

如果没有,有没有办法确定特定方向上是否存在任何其他窗格?

如果 tmux 窗口没有 (v)split 活动窗口并且触发了选择窗格命令,则会抛出错误消息 - 这是预期行为。

谢谢你的回应

Gil*_*per 8

将此添加到您的~/.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"
Run Code Online (Sandbox Code Playgroud)

基本上,这应该与 tmux 版本 2.6 + 一起运行(之后他们添加了 pane_at_top、pane_at_bottom、pane_at_left、pane_at_right 环境变量。对于 tmux < v2.6,我不完全确定您如何实现这一点。

此外,如果您想启动自定义外壳,请通过set-option -g default-command fish(或 zsh 或 csh 或其他方式)进行。作为替代方案,如果您想使用非 bash shell 作为您的 tmux 默认 shell,请将其设置为 ( set-option -g default-shell),然后您可以在您选择的 shell 脚本中编写上述逻辑。但是,(在我的情况下)使用某些 shell 并没有为您提供单行 if 命令的便利(或者可能只是我对某些 shell 不够了解,或者可能多行在运行中工作 -贝壳。

来源:我开始的 github 问题线程


Fil*_*rda 5

感谢 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'
Run Code Online (Sandbox Code Playgroud)

-n如果您想先点击前缀 ( ),请删除C-b它,然后根据您的喜好更改绑定M-[awds]