答案1
一般的做法
这select-layout
tmux 命令允许你指定一个布局,格式如下:window_layout
或者window_visible_layout
tmux 变量。这导致了以下解决方案:
一次性准备
在新的 tmux 窗口中手动创建您想要的布局。
在 tmux 窗口中的一个窗格内的 shell 中查询 tmux
window_layout
并将响应保存到文件:tmux display-message -p '#{window_layout}' >my_layout
用法
任何时候您想要使用布局,请将文件内容传递给
select-layout
:tmux select-layout "$(cat my_layout)"
笔记:
select-layout
允许您选择目标窗格(使用-t target-pane
),因此您可以使用命令为另一个窗口甚至从 tmux 外部选择布局。除了文件之外,你还可以使用 shell 变量,但由于从 shell 外部更改变量或正在运行的 shell 的环境几乎是不可能的,在 tmux 中管理环境有些复杂,在 shell 中,当你需要变量但变量没有设置时,这种情况相对容易出现。文件似乎是一种更好的方法;例如,你可以创建一个目录
~/.tmux_layouts/
并将自定义布局存储在其中。对于包含最多 N 个窗格的窗口,可以选择为 N 个窗格创建的布局。
布局是从特定尺寸的窗口中保存的。选择不同尺寸的窗口的布局将使 tmux 将其重新计算到新尺寸。结果可能完全符合您的要求,也可能不完全符合您的要求,但至少窗格的总体排列应该匹配,并且您应该能够通过调整窗格大小(例如,用鼠标拖动其边框)来实现所需的精确结果。
看起来相同的布局在逻辑上可能相同也可能不相同。例如,此布局中的窗格
+-----+-----+ | | | | | | +-----+-----+ | | | | | | +-----+-----+
可以调整大小为
+----+------+ | | | +----++-----+ | | | | | | | | | +-----+-----+
或者
+-------+---+ | | | | | | +-------+ | | +---+ | | | +-------+---+
换句话说,垂直或水平边框都是从一端延伸到另一端的单一实体,而垂直边框实际上是两个可以独立移动的边框。您拥有哪种确切的布局取决于您在创建布局时是先进行垂直分割还是先进行水平分割。对于更复杂的布局,有更多可能性。
差异不仅在调整窗格大小时才会显现出来。如果为窗格数少于布局中的窗口选择布局,视觉上相同但逻辑上不同的布局可能会产生不同的结果。
一般来说,您可能需要仔细设计所需的布局(我的意思是拆分的顺序),这样当您调整窗格大小(拖动边框)或为窗格较少的窗口选择它时,它的行为就会符合您的预期。
具体示例
以下命令将 8 个窗格排列成我认为 OP 想要的样式。但是,当选择窗格较少的窗口时,它可能符合或不符合预期。
tmux select-layout '0ab5,208x60,0,0[208x15,0,0{104x15,0,0,12,103x15,105,0,29},208x14,0,16{104x14,0,16,28,103x14,105,16,30},208x14,0,31{104x14,0,31,22,103x14,105,31,31},208x14,0,46{104x14,0,46,27,103x14,105,46,32}]'
虽然一般方法(上文)建议保存到文件并从文件中读取,但此示例直接指定布局。我在 tmux 3.3a 中创建了“布局代码”。