it-swarm.cn

将tmux窗格移至窗口

当我有多个窗口时,如何将现有窗格移动到tmux中的另一个窗口中,反之亦然?

我来自screen,在这里我可以切换到窗格,然后切换窗口,直到找到想要的那个。 tmux似乎不允许这样做。

241
mrlanrat

执行此命令的命令是tmux 1.4中的 join-pane

join-pane [-dhv] [-l size | -p percentage] [-s src-pane] [-t dst-pane]  
    (alias: joinp)
    Like split-window, but instead of splitting dst-pane and creating
    a new pane, split it and move src-pane into the space.  This can
    be used to reverse break-pane.

为简化此操作,我在.tmux.conf中具有以下绑定:

# pane movement
bind-key j command-Prompt -p "join pane from:"  "join-pane -s '%%'"
bind-key s command-Prompt -p "send pane to:"  "join-pane -t '%%'"

第一个从目标窗口获取窗格并将其连接到当前窗口,第二个则相反。

然后,您可以通过在会话中运行以下命令来重新加载tmux会话:

$ tmux source-file ~/.tmux.conf
221
jasonwryan

连接窗格就是答案。我也尝试基于tmux文档使用它时遇到问题。我发现-t-s开关似乎接受[session]:window 并不是 [session:]window。也就是说,指定会话是可选的,但包括: 是强制性的。 (我正在使用tmux 1.5)

因此,为了将窗格添加到当前窗口并将窗口1放置在窗格中,命令将为(Ctrl+B 或任何绑定键,然后按)...

:join-pane -s :1

然后,您可以使用分隔窗格将它们分开,默认情况下是: Ctrl+B! 如果您想将其绑定到快捷方式,建议不要覆盖s之类的默认绑定,因为一路走来,您将在Internet上寻找涉及选择会话的答案,并且在您的系统上将不起作用。请注意,突破窗格绑定到 ! 和 @ 在它旁边,默认情况下不绑定任何东西。因此,我建议这种绑定...

bind-key @ command-Prompt -p "create pane from:"  "join-pane -s ':%%'"

或者,具有交互式选择器...

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key [email protected] choose-window 'join-pane    -s "%%"'

或者,始终加入最近访问的窗口...

bind-key @ join-pane -h -s !

注意:-h导致它水平堆叠窗格(垂直分割),这与默认行为相反。

最重要的是,无论您选择哪种快捷方式,您的学习。因为如果您只是设置它而忘记了它,那么当您发现自己在外部服务器上时就会被吸引住。面对现实,终端多路复用器为您提供的最重要的功能是远程服务器上的可靠会话。

这完成了我从GNU屏幕到Tmux的转换。我永远不会回头。

请享用!

167
Bruno Bronosky

我想我更喜欢将窗格移动到自己的窗口中使用的东西。我用

break-pane -t :

我通过实验弄清楚了,但它似乎工作得很好。您可以轻松地对其进行键盘绑定或别名化,而无需编写脚本。

45
Joshua K

键绑定

默认, Ctrl+b, ! 将断开活动窗格到一个新窗口切换到新窗口。

哪里 Ctrl + b 是 tmux 的默认 前缀

细节

该键执行的tmux命令是 break-pane (别名:breakp),如 cmd-break-pane.c 并在 key-bindings.c 中默认绑定,如 list-keys (别名:lsk)命令输出:

bind-key    -T prefix       !                 break-pane
15
user86041

如果您不想在提示中键入窗格标识符,也可以使用

bind-key j "join-pane -s !"

它将最后一个活动窗格/窗口加入当前窗口。

14
Bernhard T

在浏览了其他答案并仔细阅读了tmux手册页之后,现在我确定了以下绑定:

bind-key S choose-window 'join-pane -v -s "%%"'
bind-key V choose-window 'join-pane -h -s "%%"'

这将允许您交互式地选择要加入的窗口,并镜像我的小写字母s/_v绑定以创建新的垂直/水平拆分。如果有人知道如何选择单个窗格而不是窗口,请告诉我。

14
toupeira

您不必更改键绑定。

当您希望移动的窗格具有焦点时,键入Prefix,然后键入:join-pane -t :1其中1是同一会话中目标窗口的编号。您可以在名称前加上project:3。为了我 join-pane tab-autocompletes from j

添加-h 要么 -v切换到命令以设置在目标中创建的新拆分的方向,或直接转到它并Prefixspace 重新排列。

4
Walf