一个典型的情况可能是:
$ 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绑定 ( ) ,您需要键入Cb Cb c。对于tmux的第三级实例,您将键入Cb Cb Cb Cb c。new-window
如果您通常处理多层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命令数量有限,则可以改为使用创建一些特定的绑定(可能只是在您的顶级tmux实例中):send-keys
bind-key C-c send-keys C-b c
bind-key C send-keys C-b C-b c
在二级tmux中创建新窗口:Cb Cc在三级tmux
中创建新窗口:Cb C
要访问内部,请按住控制并按两次 B。
编辑:
我不建议C-q
用作绑定键,因为它是默认的控制键命令
取消冻结屏幕并让屏幕显示继续
这里发生了一种情况,@Paschalis 提供了一个解决方案:
如果碰巧两次倒霉(以 Cq 为前缀的远程 tmux 会话):键入
Cltr-q
, then:
,然后输入 tmux:send-keys C-q
为简单起见,请在您的~/.tmux.conf
bind-key -n C-q send-prefix
然后您可以直接用作C-q
远程 tmux 的绑定键。