tmux是什么,tmux终端复用器入门教程(新手必看)
screen 是最初的终端多路复用器,目前仍在使用。除非由于你登录在远程环境中而不能安装其他多路复用器,那么你可能不应该使用 screen。一个原因是它不再被积极维护,另一个原因是它不太灵活,缺乏现代终端多路复用器所具有的许多功能。
tmux 是一个灵活而丰富的终端多路复用器,你可以根据自己的需要进行调整。
例如:
把所有这些例子都想象成逻辑上属于一起的事物,从持续时间来看,可以是短期的(几分钟),也可以是长期的(几天和几周)。这些任务的分组通常称为会话。
现在,如果你想要实现这种分组,有很多挑战:
为了实现这些任务,人们提出了在终端上覆盖多个窗口(以及会话,以对窗口进行分组)的想法—换句话说,就是对终端 I/O 进行多路复用。

图 1 tmux元素:会话、窗口和窗格
就像 screen 一样,在 tmux 中,你可以附加和分离一个会话。让我们从头开始启动一个名为 test 的会话:
tmux 使用 Ctrl+B 作为默认的键盘快捷键,也称为前缀或触发器。例如,要列出所有窗口,你可以按 Ctrl+B 然后 W,或者要展开当前(活动)窗格,你可以使用 Ctrl+B 然后 Z。
在 tmux 中,默认触发器是 Ctrl+B。为了改进流程,我将触发器映射到一个未使用的键,因此一次按键就足够了。我首先将触发器映射到 tmux 中的 Home 键,然后将 Home 键映射到 Caps Lock 键,方法是将 /usr/share/X11/xkb/symbols/pc 中的映射更改为 key <Caps> {[Home]};。
这种双重映射是我需要做的一种变通方法。根据你的目标键或终端,你可能不需要这样做,但我鼓励你将 Ctrl+B 映射到一个你可以轻松到达的未使用的键,因为你将每天多次按下它。
你现在可以使用下表中列出的任何命令来管理进一步的会话、窗口和窗格。表中列出了常见的 tmux 命令,按讨论的单元分组,从最宽范围(会话)到最窄范围(窗格)。
另外,当按 Ctrl+B+D 时,可以分离会话。这实际上意味着你将 tmux 放入后台。
当你启动一个新的终端实例,或者你从一个远程的地方 ssh 到你的机器,你可以连接到一个现有的会话,所以让我们用之前创建的测试会话来做:
现在你已经对如何使用 tmux 有了基本的了解,让我们将注意力转向配置和定制它。
我的 .tmux.conf 如下所示:
首先安装 tpm,tmux 插件管理器,然后为插件触发 +I。这里使用的插件如下:
下图显示了我的 Alacritty 终端运行 tmux。你可以看到位于左上角的快捷键 0 到 9 的会话。

图 2 运行中的 tmux 实例,显示了可用会话
tmux 是一个灵活而丰富的终端多路复用器,你可以根据自己的需要进行调整。
多路复用的概念
可以这样想,你通常做不同的事情,但这些事情可以归为一类。例如,你可能从事开源项目、撰写博客文章或文档、远程访问服务器、与 HTTP API 交互以测试内容等。这些任务可能每个都需要一个或多个终端窗口,并且你通常希望或需要同时在两个窗口中执行潜在的相互依赖的任务。例如:
- 你正在使用 watch 命令定期执行目录列表,同时编辑文件;
- 启动一个服务器进程(Web 服务器或应用服务器),并希望让它在前台运行,以密切关注日志;
- 你想要使用 vi 编辑一个文件,同时使用 git 查询状态并提交更改;
- 你有一个虚拟机运行在公有云中,并希望 ssh 登录它,同时有可能在本地管理文件。
把所有这些例子都想象成逻辑上属于一起的事物,从持续时间来看,可以是短期的(几分钟),也可以是长期的(几天和几周)。这些任务的分组通常称为会话。
现在,如果你想要实现这种分组,有很多挑战:
- 你需要多个窗口,因此一种解决方案是启动多个终端,或者如果UI支持的话,则启动多个实例(选项卡);
- 你希望所有的窗口和路径都在周围,即使你关闭终端或远程端;
- 你希望扩展或缩放以专注于某些任务,同时保持所有会话的概述,并能够在它们之间导航。
为了实现这些任务,人们提出了在终端上覆盖多个窗口(以及会话,以对窗口进行分组)的想法—换句话说,就是对终端 I/O 进行多路复用。
tmux快速入门
如下图所示,在 tmux 中有三个核心元素与之交互,从粗粒度单元到细粒度单元:
图 1 tmux元素:会话、窗口和窗格
- 会话:一个逻辑单元,你可以将其视为专用于特定任务的工作环境,例如“从事项目X”或“撰写博客文章Y”。它是所有其他单元的容器。
- 窗口:你可以将窗口视为浏览器中的一个选项卡,属于一个会话。使用它是可选的,而且通常每个会话只有一个窗口。
- 窗格:这些是你的主力,实际上是运行的单个 shell 实例。窗格是窗口的一部分,你可以轻松地垂直或水平分割它,以及根据需要进行展开/折叠(想想缩放)和关闭。
就像 screen 一样,在 tmux 中,你可以附加和分离一个会话。让我们从头开始启动一个名为 test 的会话:
$ tmux new -s test使用上面的命令,tmux 作为服务器运行,你发现自己处于在 tmux 中配置的 shell 中,作为客户端运行。这种客户端/服务器模型允许你创建、进入、离开和销毁会话,并使用在其中运行的 shell,而不必考虑在其中运行(或失败)的进程。
tmux 使用 Ctrl+B 作为默认的键盘快捷键,也称为前缀或触发器。例如,要列出所有窗口,你可以按 Ctrl+B 然后 W,或者要展开当前(活动)窗格,你可以使用 Ctrl+B 然后 Z。
在 tmux 中,默认触发器是 Ctrl+B。为了改进流程,我将触发器映射到一个未使用的键,因此一次按键就足够了。我首先将触发器映射到 tmux 中的 Home 键,然后将 Home 键映射到 Caps Lock 键,方法是将 /usr/share/X11/xkb/symbols/pc 中的映射更改为 key <Caps> {[Home]};。
这种双重映射是我需要做的一种变通方法。根据你的目标键或终端,你可能不需要这样做,但我鼓励你将 Ctrl+B 映射到一个你可以轻松到达的未使用的键,因为你将每天多次按下它。
你现在可以使用下表中列出的任何命令来管理进一步的会话、窗口和窗格。表中列出了常见的 tmux 命令,按讨论的单元分组,从最宽范围(会话)到最窄范围(窗格)。
目标 | 任务 | 命令 |
---|---|---|
会话 | 新创建 | :new -s NAME |
会话 | 重命名 | trigger + $ |
会话 | 列出所有会话 | trigger + s |
会话 | 关闭 | trigger |
窗口 | 新创建 | trigger + c |
窗口 | 重命名 | trigger + , |
窗口 | 切换到 | trigger + 1…9 |
窗口 | 列出所有窗口 | trigger + w |
窗口 | 关闭 | trigger + & |
窗格 | 水平分割 | trigger + “ |
窗格 | 垂直分割 | trigger + % |
窗格 | 切换 | trigger + z |
窗格 | 关闭 | trigger + x |
另外,当按 Ctrl+B+D 时,可以分离会话。这实际上意味着你将 tmux 放入后台。
当你启动一个新的终端实例,或者你从一个远程的地方 ssh 到你的机器,你可以连接到一个现有的会话,所以让我们用之前创建的测试会话来做:
$ tmux attach -t test附加到称为 test 的现有会话。如果你想从它的前一个终端分离会话,则需要提供 -d 参数。
现在你已经对如何使用 tmux 有了基本的了解,让我们将注意力转向配置和定制它。
我的 .tmux.conf 如下所示:
unbind C-b ① set -g prefix Home bind Home send-prefix bind r source-file ~/.tmux.conf \; display "tmux config reloaded :)" ② bind \\ split-window -h -c "#{pane_current_path}" ③ bind - split-window -v -c "#{pane_current_path}" bind X confirm-before kill-session ④ set -s escape-time 1 ⑤ set-option -g mouse on ⑥ set -g default-terminal "screen-256color" ⑦ set-option -g status-position top ⑧ set -g status-bg colour103 set -g status-fg colour215 set -g status-right-length 120 set -g status-left-length 50 set -g window-status-style fg=colour215 set -g pane-active-border-style fg=colour215 set -g @plugin 'tmux-plugins/tmux-resurrect' ⑨ set -g @plugin 'tmux-plugins/tmux-continuum' set -g @continuum-restore 'on' run '~/.tmux/plugins/tpm/tpm'
- ❶ 这一行和接下来的两行将触发器更改为 Home;
- ❷ 通过触发器 +r 重新加载配置;
- ❸这一行和下一行重新定义了窗格分割,保留现有窗格的当前目录;
- ❹增加新建和终止会话的快捷方式;
- ❺没有延迟;
- ❻启用鼠标选择;
- ❼将默认终端模式设置为 256 色模式;
- ❽主题设置(接下来的六行);
- ❾从这里到最后:插件管理。
首先安装 tpm,tmux 插件管理器,然后为插件触发 +I。这里使用的插件如下:
- tmux-resurrect:允许你使用 Ctrl+S(保存)和 Ctrl+R(恢复)恢复会话。
- tmux-continuum:自动保存/恢复会话(间隔 15 分钟)。
下图显示了我的 Alacritty 终端运行 tmux。你可以看到位于左上角的快捷键 0 到 9 的会话。

图 2 运行中的 tmux 实例,显示了可用会话