如何在 tmux 中以交互方式组织(移动)窗格、窗口和会话?

如何在 tmux 中以交互方式组织(移动)窗格、窗口和会话?

据我了解,tmux中事物的层次结构是这样的:会议s,其中有窗户s,其中有窗格s。使用 tmux 命令在这个层次结构中移动事物并不简单,特别是因为我没有看到任何全局唯一的窗格标识符。

是否有一些内置或外部的方法组织tmux 中的窗口和窗格,允许我将它们作为层次结构列出,从而允许我选择一个或多个项目并将它们放置在新位置?

我希望它看起来有点像这样:

 [ ] 0: 5 windows (created Sun Dec  1 02:29:25 2019) [151x43] (attached)
 [ ]   0: boi (1 panes) [151x43] [layout b83d,151x43,0,0,0] @0
 [ ]   1: mnt (1 panes) [151x43] [layout b841,151x43,0,0,4] @4
 [ ]   2: vi (1 panes) [151x43] [layout b842,151x43,0,0,5] @5
 [*]   3: vi- (1 panes) [151x43] [layout b843,151x43,0,0,6] @6
 [*]   5: sink* (1 panes) [151x43] [layout b846,151x43,0,0,9] @9 (active)
 [ ] 1: 4 windows (created Sun Dec  1 02:30:53 2019) [151x43] (attached)
 [ ]   0: vi (1 panes) [151x43] [layout b83e,151x43,0,0,1] @1
>[ ]   1: vi (1 panes) [151x43] [layout b83f,151x43,0,0,2] @2
 [ ]   2: vi- (2 panes) [151x43] [layout 9749,151x43,0,0[151x21,0,0,3,151x21,0,22,12]] @3
 [ ]     0: [151x21] [history 979/1000, 549206 bytes] %3
 [ ]     1: [151x21] [history 0/1000, 0 bytes] %12 (active)
 [ ]   3: rust-fuse* (1 panes) [151x43] [layout 5c4f,151x43,0,0,10] @10 (active)

您可以选择一个或多个会话/窗口/窗格,从原始位置剪切/复制它们并将它们粘贴到新位置。

答案1

窗格、窗口和会话都有全局唯一的标识符。窗格以 开始%,您可以通过 来查看它们tmux lsp

我不经常搬动东西,所以可能比实际情况更麻烦。

执行简单操作的最简单方法是使用标记的窗格。转到要移动或交换的窗格(在树模式之外,我的意思是使其成为活动窗格),然后C-b m对其进行标记。然后切换到您想要将其加入到的窗口C-b : join-pane或您想要与其交换的窗格C-b : swap-pane

您可以类似地使用 或 交换或移动窗口swap-window-move-window -k它们将使用包含标记窗格的窗口。

我以为你可以在树模式下做到这一点,但实际上效果不佳。理想情况下,您可以使用标记两个窗格t,然后执行: swap-pane(无前缀,树模式命令:)来交换它们,但它不起作用,因为它最终会导致两个目标每次都成为标记的窗格。这绝对可以改进...

答案2

tmux 命令choose-tree显示这样一个窗格下方窗口和窗口下方会话的分层列表。默认情况下,该键使用 (缩放)和(折叠窗格)选项w运行此命令。-Z-w

通过将其与模板命令。例如,要将活动窗格移动到交互式选择的窗口,请运行以下命令:

choose-tree -Z "join-pane -t %%"

为了使其真正有用,您可能需要为其创建一个键绑定。

许多用于操作窗口和窗格的命令都支持这些模板命令。还有一些方法可以标记或标记窗格/窗口,并用它做一些其他事情。因此,肯定有一些方法可以进一步发挥这一优势。

最近的 tmux 版本有一个具有更多功能的树模式列表。您可能需要更新 tmux 才能使用这些功能。

顺便说一句,更完整的层次结构是: 客户端 <-- 会话 <-- 窗口 <-- 窗格 目标窗格现在已拆分,第二部分是移动的窗格。

相关内容