典型情况可能是:
$ tmux
[0] $ ssh example.com
$ tmux attach
[0] $
Run Code Online (Sandbox Code Playgroud)
我打开一个tmux会话,然后ssh到服务器并附加到现有的tmux会话.此时我在另一个内部有一个tmux会话.如何将命令发送到内部tmux会话?
注意:两个tmux会话都具有相同的键绑定.
Chr*_*sen 197
该send-prefix
命令可用于将前缀击键发送到活动窗格(正在运行的进程).默认情况下,前缀为Cb并且Cb绑定到send-prefix
(因此命中它两次会将单个Cb发送到活动窗格).这正是我们访问内部tmux实例的绑定所需要的.
第一个Cb被"外部" tmux实例捕获为其前缀密钥.第二个由"外部" tmux实例捕获并触发其Cb绑定(send-prefix
).这会将Cb发送到外部实例的活动窗格.在此窗格中运行的进程(最终通过ssh实例)是"内部" tmux实例.它捕获Cb作为其前缀键.现在,您的下一个击键将通过外部tmux实例传递,并由内部实例捕获以触发绑定.
要在tmux的第二级实例中触发c binding(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
Run Code Online (Sandbox Code Playgroud)
在二级tmux中
创建新窗口:C-\c
在第三级tmux中创建新窗口:C- ^ c(或C-\C-\c)
如果您希望(轻松)发送到较低级别的tmux实例的tmux命令数量有限,则可以使用创建一些特定绑定(可能只在您的顶级tmux实例中):send-keys
bind-key C-c send-keys C-b c
bind-key C send-keys C-b C-b c
Run Code Online (Sandbox Code Playgroud)
在第二级tmux中
创建新窗口:Cb Cc
在第三级tmux:Cb C中创建新窗口
编辑:
我不建议C-q
用作绑定键,因为它是一个默认的控制键命令
取消冻结屏幕并继续显示屏幕
这种情况发生在这里,而@Paschalis提供了一个解决方案:
如果它恰好是两次不幸(带有Cq作为前缀的远程tmux会话):输入
Cltr-q
,然后:
输入tmux:send-keys C-q
为简单起见,请在您的帐号中添加以下内容 ~/.tmux.conf
bind-key -n C-q send-prefix
Run Code Online (Sandbox Code Playgroud)
然后,您可以直接使用C-q
远程tmux的bind-key.