将 tmux 窗格移至窗口

将 tmux 窗格移至窗口

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

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

答案1

执行此操作的命令是join-pane在 tmux 1.4 中。

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

答案2

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

因此,为了向当前窗口添加一个窗格并将窗口 1 放入该窗格中,命令将是(Ctrl+B或任何您的绑定键,后跟)...

:join-pane -s :1

然后,您可以使用 Break-pane 将它们分开,默认情况下是:Ctrl+B !如果您想将其绑定到快捷方式,我建议不要覆盖像 s 这样的默认绑定,因为接下来您将在互联网上查找答案涉及选择会话,它不适用于您的系统。请注意,break-pane 绑定到它!并且@就在它旁边,默认情况下不绑定到任何东西。出于这个原因,我建议这种绑定......

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

或者,有一个交互式选择器......

bind-key   @ choose-window 'join-pane -h -s "%%"'
bind-key C-@ choose-window 'join-pane    -s "%%"'

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

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

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

最重要的是,无论你选择什么捷径,你都可以学习。因为如果你只是设置了它然后忘记了它,那么当你发现自己在国外服务器上时,你就会陷入困境。让我们面对现实吧,终端多路复用器为您提供的最重要的功能是远程服务器上的可靠会话。

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

享受!

答案3

我想我更喜欢我一直使用的将窗格移动到自己的窗口的方法。我用

break-pane -t :

我通过实验发现了这一点,但似乎效果很好。您可以轻松地对其进行按键绑定或别名,无需编写脚本。

答案4

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

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

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

相关内容