如何移动 Tmux 窗格

Epi*_*pic 4 tmux

我喜欢使用 3 个 tmux 窗格。屏幕上半部分有一个水平窗格,下半部分还有两个窗格。这些窗格是垂直分割的。

tmux 窗格图像

在某些情况下,我想选取最后一个窗格并使其从上到下。像这样:

目标 tmux 窗格图像

我怎样才能实现这个目标?使用[ctrl+b ctrl+o]和[ctrl+b space]都达不到想要的位置,比较麻烦。

meu*_*euh 5

可能有一种更简单的方法,但您可以做的是在两种配置中手动排列窗格,并用以下方式标记变量中的每个布局:

layout1=$(tmux list-windows -F '#{window_layout}')
Run Code Online (Sandbox Code Playgroud)

这包含一个类似的字符串:

5f2f,80x23,0,0[80x11,0,0,0,80x11,0,12{39x11,0,12,1,40x11,40,12,2}]
Run Code Online (Sandbox Code Playgroud)

您不得以任何方式更改它,因为第一个数字是字符串其余部分的校验和。

获得两个字符串后,您可以使用select-layout或从具有变量的 shell 发出命令来设置绑定以设置该布局:

tmux select-layout "$layout1"
Run Code Online (Sandbox Code Playgroud)

您可能会发现编写一个小帮助程序脚本更容易,例如mtmux在布局之间切换:

#!/usr/bin/bash
# /sf/ask/3944025641/
# toggle between 2 layouts, previously saved
layout1='5f2f,80x23,0,0[80x11,0,0,0,80x11,0,12{39x11,0,12,1,40x11,40,12,2}]'
layout2='093c,80x23,0,0{39x23,0,0[39x11,0,0,0,39x11,0,12,4],40x23,40,0,3}'
layout="$(tmux list-windows -F '#{window_layout}')"
case "$layout" in
*80x11*)    new=$layout2 ;;
*)          new=$layout1 ;;
esac
tmux select-layout "$new"
tmux display-panes
exit 0
Run Code Online (Sandbox Code Playgroud)

并有一个绑定(例如 control-L)来运行此 shell:

    bind-key -n C-l run-shell 'mtmux'
Run Code Online (Sandbox Code Playgroud)