Mac 自带终端或者 iTerm2 做日常操作够用了,lscdgit 这些都没问题,多标签和简单分屏也支持。

但如果你踩过这些坑:

  • 手滑关了终端窗口,跑了半小时的编译/下载直接没了
  • 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),按方向键选择后回车

几点说明:

  1. 命名会话建议用项目名,比如 tmux new -s blog,后面 tmux ls 一眼就能认出来
  2. Ctrl+B 是先按住 Ctrl+B 松开,再按下一个键,不是同时按

tmux 就这些东西,上手很快。核心就是它把”终端会话”和”终端窗口”的生命周期解耦了,关窗口不杀进程,这对 SSH 场景来说是刚需。

有类似痛点的话,装一个试试就知道了。