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

典型的情况可能是:

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

我打开一个tmux会话,然后ssh到一个服务器,并附加到一个现有的tmux会话。 在这一点上,我有一个tmux会议内另一个。 如何将命令发送到内部tmux会话?

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

send-prefix命令可用于将前缀击键发送到活动窗格中的(正在运行的进程)。 默认情况下,前缀是Cb,Cb绑定到send-prefix (因此将其打到两次会将单个Cb发送到活动窗格)。 这正是我们需要访问内部tmux实例的绑定。

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

要在tmux的二级实例中触发c绑定( new-window ),可以键入Cb Cb c 。 对于tmux的第三级实例,您可以键入Cb Cb Cb Cb c

如果您通常处理多个层次的tmux ,则每个层次的倍增可能会令人讨厌。 如果你可以省掉其他一些键,你可以做一个没有前缀的绑定来使事情变得更容易:

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

在二级tmux中创build新窗口: C- \ c
在第三级tmux中创build新窗口: C- ^ c (或C- \ C- \ c


如果您想要(轻松)发送到较低级别的tmux实例的tmux命令的数量有限,则可以使用send-keys来创build一些特定的绑定(可能仅在您的顶级tmux实例中):

 bind-key Cc send-keys Cb c bind-key C send-keys Cb Cb c 

在二级tmux中创build新窗口: Cb Cc
在第三级tmux中创build新窗口: Cb C

要进入内部,按住控制键并按两次。

编辑:

build议使用Cq作为绑定键,因为它是一个默认的控制键命令

不冻结屏幕并让屏幕继续显示

这里发生的情况是@Paschalis提供了一个解决scheme:

如果碰巧是两次不幸(以Cq作为前缀的远程tmux会话):inputCltr-q ,然后: ,并inputtmux: send-keys Cq

下面是答案:


为了简单~/.tmux.conf ,在~/.tmux.conf添加下面的行

 bind-key -n Cq send-prefix 

那么你可以直接使用Cq作为远程tmux的绑定键。