Mac 自带终端或者 iTerm2 做日常操作够用了,ls、cd、git 这些都没问题,多标签和简单分屏也支持。
但如果你踩过这些坑:
- 手滑关了终端窗口,跑了半小时的编译/下载直接没了
- SSH 连服务器时网络抖了一下,远程任务瞬间蒸发
- 想同时看代码、跑服务、查日志,标签切来切去眼睛都花了
- 自带分屏太死板,布局调不好,工作状态也留不住
什么是 tmux ?
tmux 是干嘛的?
简单理解:终端里的窗口管理器 + 后台保活工具。
它能在单个终端窗口里开多个会话、分多个窗格。关键是——所有会话和任务会在后台持续运行。你关掉终端、断网、锁屏都无所谓,再连上之后用 tmux attach 就能回到之前的状态,进度一点不丢。
说白了,tmux 解决的就是”终端一关,任务全没”这个痛点,顺便把分屏和多任务管理做得挺好用。
核心功能
后台保活
这是 tmux 最核心的优势:
- 自带终端:关窗口 = 所有程序结束;断 SSH = 远程任务直接挂
- tmux:关终端只是”隐藏”会话,任务继续跑,下次
tmux attach无缝衔接
适用场景:跑编译、大数据下载、模型训练、长期爬虫、远程服务器任务
分屏
自带终端的分屏功能比较有限,tmux 支持:
- 无限切分:上下、左右、混合,想怎么切都行
- 自由调整:拖拽窗格大小、关掉单个窗格、快速切焦点
- 布局复用:保存常用布局,下次直接调用
适用场景:同时写代码 + 跑服务 + 看日志 + 查文档,不用来回切换标签
SSH 远程开发
经常连服务器的,tmux 基本是标配。
之前在公司网络不太稳定,SSH 动不动就断。后来学乖了,上服务器先开个 tmux 会话,断了再连上去 tmux a 就能接着干活。
多会话隔离
可以同时开多个独立会话,互不干扰:
- 会话 1:开发项目 A
- 会话 2:跑项目 B 的服务
- 会话 3:服务器运维
不用开一堆终端窗口,桌面清爽很多。
复制粘贴和滚动
自带终端的复制粘贴、滚动历史在某些场景下很别扭。tmux 配一下就能用鼠标滚动、跨窗格复制,顺手很多。
配置鼠标滚动(Ghostty/现代终端必看)
如果你用 Ghostty 或其他现代终端,在 tmux 里滑动触摸板时可能会发现:滚动的不是屏幕内容,而是之前输入的命令历史。
原因:tmux 默认没开鼠标支持。此时终端进入”备用屏幕模式”,滚动事件被转换成方向键输入,所以触发了历史命令切换而不是屏幕滚动。
解决方法:开启 tmux 的鼠标支持。
第 1 步:编辑配置文件
1 | nano ~/.tmux.conf |
文件不存在也没关系,直接创建就行。
第 2 步:添加配置
在文件里加一行:
1 | set -g mouse on |
第 3 步:重新加载配置
在 tmux 会话里运行:
1 | tmux source-file ~/.tmux.conf |
或者直接关掉 tmux 重开也行。
配置后的效果:
- 滑动触摸板时,tmux 自动进入复制模式,右上角会显示位置指示器
- 可以正常上下滚动查看历史输出
- 滚回最底部或按
q键退出复制模式,回到正常输入状态
Mac 安装 tmux
Homebrew 一行命令:
1 | brew install tmux |
装完终端输入 tmux 就能启动。
常用命令
整理了最常用的命令,按”会话管理 + 窗格操作 + 窗口操作”分类:
| 操作类型 | 具体操作 | 命令 / 快捷键 |
|---|---|---|
| 会话管理 | 新建默认会话 | 终端输入 tmux |
| 新建命名会话(推荐) | 终端输入 tmux new-session -s name(简化写法:tmux new -s name) |
|
| 列出所有后台会话 | 终端输入 tmux list-sessions(简化写法:tmux ls) |
|
| 连接最近会话 | 终端输入 tmux attach(简化写法:tmux a) |
|
| 连接指定命名会话 | 终端输入 tmux attach -t name(简化写法:tmux a -t name) |
|
| 退出会话(保留后台) | 会话内按 Ctrl+B → 再按 D(detach) |
|
| 强制关闭指定会话 | 终端输入 tmux kill-session -t name |
|
| 窗格操作 | 左右分屏(创建垂直窗格) | 会话内按 Ctrl+B → 再按 %(英文百分号) |
| 上下分屏(创建水平窗格) | 会话内按 Ctrl+B → 再按 "(英文双引号) |
|
| 切换窗格焦点 | 会话内按 Ctrl+B → 再按方向键(上下左右) |
|
| 关闭当前窗格 | 会话内按 Ctrl+B → 再按 X → 回车确认 |
|
| 窗口操作 | 新建终端窗口(会话内多窗口) | 会话内按 Ctrl+B → 再按 C(create) |
| 切换会话/窗口(可视化选择) | 会话内按 Ctrl+B → 再按 W(window/session),按方向键选择后回车 |
几点说明:
- 命名会话建议用项目名,比如
tmux new -s blog,后面tmux ls一眼就能认出来 Ctrl+B是先按住 Ctrl+B 松开,再按下一个键,不是同时按
tmux 就这些东西,上手很快。核心就是它把”终端会话”和”终端窗口”的生命周期解耦了,关窗口不杀进程,这对 SSH 场景来说是刚需。
有类似痛点的话,装一个试试就知道了。