我如何从完全不同的 tmux 会话中获取一个窗口并将其作为水平/垂直分割附加到当前窗口?
答案1
听起来您正在寻找 join-pane。从技术上讲,对于问题的第二部分,您希望将窗格加入到当前窗口,而不是其他会话的完整窗口,因为这可能包含多个窗格。
这是一个例子。假设您在会话 0、窗口 4 中,并且在会话 2 中您想要窗口 3 的窗格 1。在 tmux 提示符中(ctrl+b :
默认情况下)
join-pane -s 2:3.1
这会将窗格 1 从窗口 3、会话 2(-s 是源窗口并采用格式 session:window.pane)移动到当前会话(会话 0)。
以下是 join-pane 的完整文档,您可以从 tmux 手册页获取。阅读文档时,对我来说最困惑的部分是弄清楚 src-pane 指定会话、窗口和窗格编号的预期格式(session:window.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.
答案2
如果您尝试在同一个会话内连接窗格,您会本能地想要从命令中省略“session:”。这将失败。似乎 join-pane 的 -s 和 -t 开关接受 [session]:window[.pane] 形式的参数,而不是 [session:]window[.pane]
也就是说,会话是可选的,而 : 是必需的。这很愚蠢。这相当于浏览器要求http://google.com:/作为快捷版本http://google.com:80/并给出错误http://google.com/哦哦
由于 ctrl-b ! 将当前窗格拆分为一个单独的窗口(这与我们想要执行的操作相反),并且 ctrl-b @(就在 ! 旁边)默认不受约束(意味着您不会覆盖任何内容)我建议创建此快捷方式...
bind-key @ command-prompt -p "create pane from:" "join-pane -s ':%%'"