典型情况可能是:
$ tmux
[0] $ ssh example.com
$ tmux attach
[0] $
我打开一个tmux会话,然后ssh到服务器并附加到现有的tmux会话。此时我在另一个内部有一个tmux会话。如何将命令发送到内部tmux会话?
注意:两个tmux会话都具有相同的键绑定。
答案 0 :(得分:179)
send-prefix
命令可用于将前缀击键发送到活动窗格(正在运行的进程)。默认情况下,前缀为 Cb , Cb 绑定到send-prefix
(因此,点击两次会向 Cb 发送一个 Cb 活动窗格)。这正是我们访问内部 tmux 实例的绑定所需要的。
第一个 C-b 被“外部” tmux 实例捕获为其前缀键。第二个被“外部” tmux 实例捕获并触发其 C-b 绑定(send-prefix
)。这会将 C-b 发送到外部实例的活动窗格。此窗格中运行的进程(最终通过 ssh 实例)是“内部” tmux 实例。它捕获 C-b 作为其前缀键。现在,您的下一个击键将通过外部 tmux 实例传递,并由内部实例捕获以触发绑定。
要在 tmux 的第二级实例中触发 c 绑定(new-window
),您需要输入 Cb Cb c 。对于 tmux 的第三级实例,您可以键入 C-b C-b C-b C-b c 。
如果您经常处理多层 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 命令数量有限,则可以使用{{1}创建一些特定的绑定(可能只在你的顶级 tmux 实例中):
send-keys
在第二级 tmux 中创建新窗口: C-b C-c
在第三级 tmux 中创建新窗口: C-b C
答案 1 :(得分:39)
要访问内部,按住控制并按B键两次。
答案 2 :(得分:6)
编辑:
我不建议使用 C-q
作为绑定键,因为它是
取消冻结屏幕并让屏幕显示继续
情况发生here,而@Paschalis提供了解决方案:
如果碰巧两次不幸(带有C-q作为前缀的远程tmux会话):输入
Cltr-q
,然后输入:
,然后输入tmux:send-keys C-q
为简单起见,请在~/.tmux.conf
bind-key -n C-q send-prefix
然后您可以直接使用C-q
作为远程tmux的bind-key。