tmux 中的“控制模式”是什么?

Bla*_*ard 11 tmux

根据man tmux检查启动选项:

-C:以控制模式启动(参见控制模式部分)。给定两次 (-CC) 禁用回声。

然后在 的控制模式部分man tmux,有如下说明:

CONTROL MODE
     tmux offers a textual interface called control mode.  This allows
     applications to communicate with tmux using a simple text-only protocol.

     In control mode, a client sends tmux commands or command sequences
     terminated by newlines on standard input.  Each command will produce one
     block of output on standard output.  An output block consists of a %begin
     line followed by the output (which may be empty).  The output block ends
     with a %end or %error.  %begin and matching %end or %error have two
     arguments: an integer time (as seconds from epoch) and command number.
     For example:

           %begin 1363006971 2
           0: ksh* (1 panes) [80x24] [layout b25f,80x24,0,0,2] @2 (active)
           %end 1363006971 2

     The refresh-client -C command may be used to set the size of a client in
     control mode.

     In control mode, tmux outputs notifications.  A notification will never
     occur inside an output block.
Run Code Online (Sandbox Code Playgroud)

我不确定它是什么意思,但至少就我尝试了一些命令并尝试通过 ( tmux -CC)查看它的外观和感觉而言,它看起来与我通过tmux new-session.

那么什么是“控制模式”,它与普通模式的区别是什么?


编辑

我发现会话和通过控制模式 ( -CC)启动的窗口对 tmux 命令的键盘快捷键没有反应,例如窗口拆分。那么首先使用控制模式有什么意义呢?

小智 14

我在 Mac 上,我使用 iTerm2。据我所知,它是唯一具有 tmux 集成的终端模拟器。你从做开始tmux -CC,iTerm 将控制你的 tmux 会话。这意味着您可以像往常一样正常使用 iTerm2(CM​​D-D 垂直拆分窗口,CMD-SHIFT-D 水平拆分窗口)。您可以使用鼠标来重新定位窗格而不是使用C-b {。您根本不需要使用前缀。在处理窗格时,复制和粘贴也不会有任何问题。

tl;dr Usingtmux -CC允许您在支持它的终端上“本地”使用 tmux。到目前为止,我还没有看到任何支持它的 linux 终端,只有 Mac 上的 iTerm2。

  • [tmux - 控制模式](https://github.com/tmux/tmux/wiki/Control-Mode) 说“_它是由 George Nachman 设计和编写的,允许他的 iTerm2 终端与 tmux 交互并使用iTerm2 UI_” (9认同)

All*_*len 7

tmux控制模式不适合直接使用。它将 的行为从交互式改变tmux为更像“代理”。它的使用方式是在支持此功能的终端仿真器(例如 iTerm2)中调用。不幸的是,目前还没有支持控制模式的Linux 终端。(尽管《终结者》似乎正在取得进展。)

这是一个杀手级的功能。

作为如何使用它的示例,请考虑涉及ssh远程服务器的工作流程。当您在该服务器上工作时,如果您想启动另一个会话,则必须创建一个新ssh连接(并不困难,但很麻烦,并且需要进行较小的上下文切换)。

进入tmux

tmux可以通过单个连接创建多个远程会话(因此名称中的“多路复用器”),并将它们显示在多个选项卡和拆分窗格中。这当然有效,但我发现导航所需的组合键tmux太麻烦了,让我希望有更好的东西。如果有一种方法可以让遥控器上的选项卡和分割窗格像本地本地终端模拟器一样流畅和自然就好了……

进入tmux -CC

tmux控制模式允许支持它的终端模拟器tmux通过直接向其发出命令来控制会话(请参阅meuh的答案)。例如,您可以在远程会话中打开一个新的窗格/选项卡,但使用与打开本地窗格/选项卡相同的击键/命令,并且它将本地窗格/选项卡,但连接到远程会议。


meu*_*euh 5

控制模式的有趣之处在于您可以编写一个后台进程来监听真正的 tmux 进程。它会收到真实 tmux 中发生的事情的通知,然后可以发送命令。如果您使用 2 个终端并在一个终端中运行正常会话

tmux new -s mysession
Run Code Online (Sandbox Code Playgroud)

而在另一个

tmux -C attach -t mysession
Run Code Online (Sandbox Code Playgroud)

然后当你拆分窗口,添加新窗口,或者在普通的 tmux 中关闭它们时,你会得到类似的行

%layout-change @2 91a8,80x23,0,0[80x11,0,0,5,80x11,0,12,7]
%window-add @3
%window-close @1
Run Code Online (Sandbox Code Playgroud)

在控制 tmux 中,您可以通过编写程序来对此做出反应。为了帮助有一个python 库来利用这个机制。请参阅那里的示例。

  • 这很愚蠢,但我想感谢您以与其他人不同的方式解释它。在这样做的过程中,你给了我一个很酷的主意。我有时会修改我制作的实现终端 UI 的小程序(几乎是对“curses”的一些小改造)。所以,我一直在做的就是组装用于单元测试的小库,这些库基本上在 tmux 内生成窗格,因为它是一个很好的 PTY 沙箱,并且能够在一个屏幕上并行显示测试输出,并且没有任何东西可以加速我的引擎就像并行运行的测试一样。现在我知道使用这种模式来命令 tmux! (2认同)