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

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.

我不确定这意味着什么,但至少就我尝试一些命令并尝试通过 ( tmux -CC) 查看它的外观和感觉而言,它看起来与我通过 启动时相同tmux new-session

那么什么是“控制模式”,它与普通模式有什么不同呢?


编辑

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

答案1

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

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

答案2

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

tmux new -s mysession

而在另一个

tmux -C attach -t mysession

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

%layout-change @2 91a8,80x23,0,0[80x11,0,0,5,80x11,0,12,7]
%window-add @3
%window-close @1

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

答案3

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

这是一个杀手级的功能。

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

进入tmux

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

进入tmux -CC

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

答案4

据我了解,控制模式就像普通客户端一样。区别在于控制模式。tmux客户端从标准输入读取命令并发送给tmux服务器。相反,处于控制模式的客户端从服务器接收消息,并打印到标准输出,而不是像普通客户端那样绘制终端。

相关内容