在另一个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会话):input
Cltr-q
,然后:
,并inputtmux:send-keys Cq
下面是答案:
为了简单~/.tmux.conf
,在~/.tmux.conf
添加下面的行
bind-key -n Cq send-prefix
那么你可以直接使用Cq
作为远程tmux的绑定键。