我想实现的目标:

我想实现的目标:

这个问题(据我所知)以前没有被问过,但会让使用 tmux 的任何人受益!我也尝试在 github 上搜索插件等,但还没有成功。

我想实现的目标:

  • 在同名窗口之间循环。

为什么?

假设您有 6 个 tmux 窗口,按以下顺序排列,状态栏看起来与此类似:

[0:zsh][1:vim][2:zsh][3:vim][4:zsh][5:vim]

如果我当前位于窗口 0 (zsh):

  • 我想在 3 个“zsh”窗口 (0,2,4) 之间循环

如果我当前位于窗口 1 (vim):

  • 我想在 3 个“vim”窗口 (1,3,5) 之间循环

这将允许您循环相同类型的窗口,而不必先重新排序所有窗口(vim 紧挨着 vim,zsh 紧挨着 zsh 等)。幸福!

我自己尝试过,但没有成功:(

答案1

我创建了一个基本的解决方案。

  1. 将以下脚本另存为_tmux-cycle-samename并使其可执行 ( chmod +x _tmux-cycle-samename)。

    #!/bin/sh
    
    if [ "$1" = "-r" ]; then filter=tac; else filter=cat; fi
    
    name="$(tmux display-message -p '#W' | sed 's|\(.\)|[\\\1]|g')"
    
    tmux select-window -t "$(
       tmux list-windows -F '#{window_active} #{window_id} #W' \
       | grep '^[01] @[0123456789]* '"$name"'$' | "$filter" \
       | awk '
          NR==1 {result=$2}
          { if (seen==1) {result=$2; exit} 
            seen=$1
          }
          END {print result}
       '
    )"
    

    该脚本检索正确的名称 ( tmux display-message …) 并准备字符串 ( sed …),因此当稍后解释为正则表达式时,名称将按字面匹配。然后该脚本列出窗口 ( tmux list-windows …),选择匹配的窗口 ( grep …),保留或反转顺序(cattac根据 的展开$filter)并查找下一个非活动窗口 ( awk …)。最后找到的窗口被选中(tmux select-window …)。

  2. 将这些添加到您的~/.tmux.conf

    bind-key -T prefix > run-shell '/full/path/to/_tmux-cycle-samename'
    bind-key -T prefix < run-shell '/full/path/to/_tmux-cycle-samename -r'
    

    如果_tmux-cycle-samename可以通过解决PATH,则无需指定完整路径。

  3. 如果已经在里面了tmux就跑tmux source-file ~/.tmux.conftmux重新启动的服务器将自动获取该文件。

  4. 尝试prefix>prefix<您的中tmux测试解决方案(默认prefixCtrl+ b)。

答案2

有一个命令可以切换到上次访问的窗格:ctrl-b+;

您可以绑定#键(或您喜欢的任何内容)以切换到上次访问的 tmux 窗格。我选择它#是因为它就像如何:b#切换到 vim 中的最后一个缓冲区:

# go to last pane (like b# in vim)
bind '#' select-pane -l

因此,您只需按 tmux 前缀(默认情况下ctrl-b),然后按#.

相关内容