据我了解,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 才能使用这些功能。
顺便说一句,更完整的层次结构是: 客户端 <-- 会话 <-- 窗口 <-- 窗格 目标窗格现在已拆分,第二部分是移动的窗格。