152

一个典型的情况可能是:

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

我打开一个 tmux 会话,然后 ssh 进入服务器并附加到现有的 tmux 会话。此时我在另一个会话中有一个 tmux 会话。如何将命令发送到内部 tmux 会话?

注意:两个 tmux 会话具有相同的键绑定。

4

3 回答 3

231

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 cnew-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

于 2011-12-16T05:05:40.163 回答
62

要访问内部,请按住控制并按两次 B。

于 2016-11-17T22:37:35.533 回答
9

编辑:

建议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 的绑定键。

于 2015-09-24T16:56:28.880 回答