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

我来自屏幕,可以在其中切换到窗格,然后切换窗口直到我到达我想要的那个; tmux似乎不允许这样做。

#1 楼

要执行此操作的命令是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会话:

# 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.conf文件并执行Ctrl-b,j时,似乎什么都没发生。

–mrlanrat
2011年6月3日4:19在

您至少需要打开2个窗口,每个窗口中都有几个窗格:然后按Prefix + s,然后在提示时输入窗口名称,以将窗格发送到该窗口...

– Jasonwryan
2011年6月3日4:28



我仍然没有运气,什么也没有发生。我感到tmux没有读取.tmux.conf文件,因为它根本不响应Ctrl-b,j或Ctrl-b,s。 (这是配置文件中仅有的两行)

–mrlanrat
2011年6月3日5:22



@mrlanrat我发现您必须在窗口号前加一个冒号。请参阅下面的答案。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
2012年2月1日在16:17

“ %%”指的是什么?

–寡核苷酸
19年7月2日在8:43

#2 楼

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

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

:join-pane -s :1


然后可以使用分隔窗格将它们分开,默认情况下为Ctrl + B!如果您想将其绑定到快捷方式,建议不要覆盖像s这样的默认绑定,因为一路走来,您将在Internet上寻找涉及选择会话的答案,并且在您的系统上将不起作用。请注意,分隔窗格已绑定到! @紧挨着它,并且默认情况下不绑定任何东西。因此,我建议使用这种绑定方式。
或者,始终加入最近访问过的窗口... ),而不是默认行为,即相反。

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

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

享受吧!

评论


我也一直想念':'...谢谢。

–骚扰
2012年9月20日19:03在

文档根本没有提到冒号!好一个

–JonnyRaa
17年11月24日在9:45

使用点语法是帮助window.pane的原因,例如join-pane -s 1.0将窗口1中的窗格0移动到当前窗口中。有关更多详细信息,请访问maciej.lasyk.info/2014/Nov/19/tmux-join-pane

–mbigras
18年8月1日在4:45



从tmux 2.1开始,:显然不再需要(例如::join-pane -s 1)。也许这是早期版本中的错误

–villapx
18年11月1日在16:16

man tmux中的@JonnyRaa,在“命令”下的几段文字中,““目标窗口(或src窗口或dst-window)在session:window表单中指定了一个窗口”。

– jchook
20-5-7在23:11



#3 楼

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

break-pane -t :


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

评论


+1。我倾向于比联接窗格更多地使用它。

–克里斯B
2012年11月21日,下午3:51

哇...

–vdegenne
20年1月8日在15:30

#4 楼

键绑定

默认情况下,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


#5 楼

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

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


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

评论


这非常有帮助。谢谢。不幸的是,-v和-h不会分别创建垂直和水平“拆分”。它们分别创建垂直和水平“堆叠窗格”。 (也就是说,垂直堆叠的窗格具有水平的分割。)因此,您必须以这种方式训练大脑。另外-v是默认值,因此我将其省略,仅将-h放在其中,以便您的〜/ .tmux.conf充当备忘单供您查看。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
17年11月13日在18:58

我比其他“突破窗格”的答案更喜欢这个。暂时将窗格自由地拆分到其自己的窗口中之后,稍后我想将其发送回一个较旧的窗口,并且该窗口可以正常处理。

–稳定狗
19年7月26日在13:29

#6 楼

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

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


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

评论


您正在使用哪个版本?我收到未知命令:join-pane -s!与1.6。

–天堂
2012年8月28日17:00

在这里使用2.0,但是仅将行放入conf中而不使用引号似乎可以正常工作。绑定键j连接窗格-s!

– bkzland
16-2-17在13:50



#7 楼

您不必更改键绑定。

要移动的窗格具有焦点时,请键入Prefix,然后键入:join-pane -t :1,其中1是同一会话中目标窗口的编号。您可以通过在名称前加上project:3之类的名称将其移至另一个会话。对我来说,join-pane的制表符自动完成功能。 。