在另一个 tmux 会话中打开一个 tmux 会话时如何发送命令?

典型的情况可能是:

$ tmux
[0] $ ssh example.com
$ tmux attach
[0] $

我打开一个 tmux 会话,然后 ssh 进入服务器并附加到现有的 tmux 会话。此时,我在另一个内部有一个 tmux 会话。如何向内部 tmux 会话发送命令?

注意: 两个 tmux 会话具有相同的密钥绑定。

39481 次浏览

send-prefix命令可用于将前缀击键发送到活动窗格(正在运行的进程)。默认情况下,前缀是 C-B,并且 C-B绑定到 send-prefix(这样两次命中它就会向活动窗格发送一个 C-B)。这正是我们访问内部 TMux实例的绑定所需要的。

第一个 C-B被“外部”TMux实例捕获为其前缀键。第二个实例由“外部”TMux实例捕获,并触发其 C-B绑定(send-prefix)。这将向外部实例的活动窗格发送一个 C-B。在这个窗格中运行的进程(最终通过一个 实例)是“内部”TMux实例。它捕获 C-B作为其前缀键。现在,您的下一个按键将通过外部 TMux实例传递,并由内部 TMux实例捕获以触发绑定。

要在 TMux的二级实例中触发 C绑定(new-window) ,您需要键入 C-b C-b C。对于 TMux的第三级实例,您应该键入 C-b C-b C-b C-b

如果您通常处理的是 TMux的多个层,那么每个级别的这种倍增可能会很烦人。如果您可以腾出一些其他的键,您可以创建一个无前缀的绑定,以使事情(可能)更容易输入:

bind-key -n C-\ send-prefix
bind-key -n C-^ send-prefix \; send-prefix

在二级 TMux: C-C中创建新窗口
在三级 TMux中创建新窗口: C-^ c(或 C-C-C)


如果您想(容易地)发送到低级 TMux实例的 TMux命令数量有限,您可以使用 send-keys来创建一些特定的绑定(可能只是在您的顶级 TMux实例中) :

bind-key C-c  send-keys C-b c
bind-key C    send-keys C-b C-b c

在二级 TMux: C-b C-c中创建新窗口
在第三级 TMux中创建新窗口: < strong > C-b C

编辑:

我建议使用 C-q作为绑定键,因为它是

解冻屏幕,让屏幕显示继续

给你出现了一种情况,@Paschalis 提供了一种解决方案:

如果运气不好两次(以 C-q 为前缀的远程 tmux 会话) : 输入 Cltr-q,然后输入 :,再输入 tmux: send-keys C-q

下面是答案:


为了简单起见,在 ~/.tmux.conf中添加以下代码行

bind-key -n C-q send-prefix

然后,您可以 直接使用 C-q作为远程 tmux 的绑定键。

要进入内部,保持控制,按 B 键两次。