tmux + Ghostty 工作流 (终端复用器与终端模拟器)
如果你只记住一句话:Ghostty 是”装终端的窗口”,tmux 是窗口里再套一层”多任务管理器”。 两者分工不同、互补不冲突。
1. 定义
要从”你每次敲命令时电脑里发生了什么”说起,否则这两个工具很容易混淆。
当你在 macOS 上打开一个黑底绿字的窗口敲命令,背后其实有三层东西:
┌─────────────────────────────────────────────────────────┐
│ ① 终端模拟器 (Terminal Emulator) —— 比如 Ghostty、iTerm │
│ "画界面的窗口",负责显示字符、接收按键、渲染字体/颜色 │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ ② Shell —— 比如 zsh、bash │ │
│ │ "翻译官",把你敲的命令变成系统调用 │ │
│ │ │ │
│ │ ┌─────────────────────────────────────────────┐ │ │
│ │ │ ③ 程序 —— 比如 python、vim、node │ │ │
│ │ │ 真正干活的东西 │ │ │
│ │ └─────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
- 终端模拟器(Terminal Emulator):一个 GUI 程序,本质是”假装自己是老式物理终端机的软件”。它给你一个能打字、能看输出的窗口。Ghostty、iTerm2、macOS 自带”终端”都属这一类。
- 终端复用器(Terminal Multiplexer):一个在 Shell 层面运行的命令行程序(tmux)。它在一个终端窗口里,再虚拟出多个”会话 / 窗口 / 面板”,而且——关键点——关掉外层窗口,里面的程序还在后台跑。
类比:终端模拟器像”浏览器这个 App”;tmux 像”浏览器里开的一个网页应用,它能开很多标签页,而且你关掉浏览器再打开,那些标签页(会话)还活着”。
2. 核心概念
Ghostty 管什么(本地体验层)
| 概念 | 是什么 | 默认快捷键(macOS) |
|---|---|---|
| 窗口 Window | 一个独立的 Ghostty 程序窗口 | Cmd+N |
| 标签页 Tab | 窗口内的多个标签页 | Cmd+T |
| 原生分屏 Split | 一个标签页里左右/上下拆成几块 | Cmd+D(右)、Cmd+Shift+D(下) |
| 主题/字体/模糊 | 纯界面渲染效果 | 写在 ~/.config/ghostty/config |
Ghostty 的原生分屏/标签页只是显示层的切割,关掉窗口,里面的进程就死了。它不负责”持久化”。
tmux 管什么(持久化层)
| 概念 | 是什么 | 说明 |
|---|---|---|
| Session 会话 | 一个独立工作环境 | 可后台保留,断线不丢 |
| Window 窗口 | 会话里的”标签页”,可多个 | 前缀 + c 新建 |
| Pane 面板 | 窗口里再左右/上下分屏 | 前缀 + | 竖、前缀 + - 横 |
tmux 的”前缀键”(prefix)默认是 Ctrl+b。所有 tmux 快捷键都要先按 Ctrl+b 松开,再按功能键。例如 Ctrl+b 然后按 %(旧默认横分)或我们配的 \|。
一句话:Ghostty 用 Cmd 系快捷键,tmux 用 Ctrl+b 系快捷键。所以两者叠在一起用不会冲突——这正是它们能配合的原因。
3. 在系统中的位置(为什么需要两个)
Ghostty 窗口 (本地 macOS)
├─ Tab 1: 本地 shell (随便用,关了就关了)
├─ Tab 2: tt → tmux session "main" (持久化!)
│ ├─ pane: 写代码 (vim)
│ └─ pane: 跑测试
└─ Tab 3: sshx server → 远程机器上的 tmux session (SSH 断了也继续跑)
├─ pane: 训练任务
└─ pane: 看日志
- 只装 Ghostty,不装 tmux:能分屏、能多标签,但 SSH 到服务器跑训练,一断网,训练就死了。
- 只装 tmux,不装 Ghostty:功能上够用,但本地分屏的观感、字体渲染、模糊质感不如现代模拟器(iTerm/Ghostty/Kitty 这类)。
- 两者一起:本地顺手(Ghostty 原生分屏)+ 远程不断线(tmux 持久化)。互补。
4. 基本用法
Ghostty(几乎不用记命令,都是界面操作)
# 安装(你已经是 brew 装的)
brew install --cask ghostty
# 配置文件位置
~/.config/ghostty/config
# 常用界面操作
# Cmd+T 新标签页
# Cmd+D 向右分屏 Cmd+Shift+D 向下分屏
# Cmd+[ / Cmd+] 在分屏间切换tmux(核心命令,前缀键 = Ctrl+b)
# --- 会话 ---
tmux new -s work # 新建名为 work 的会话
tmux attach -t work # 重新接入(断线后重连就靠它)
tmux ls # 列出所有会话
tmux kill-session -t work
# --- 进入 tmux 后的快捷键(先按 Ctrl+b 松开,再按)---
# c 新建窗口 n / p 下一个/上一个窗口
# % 竖分屏(默认) | 竖分屏(我们配的,更直观)
# " 横分屏(默认) - 横分屏(我们配的)
# h/j/k/l 在面板间移动(vim 风格,我们配的)
# d 脱离会话(detach,程序继续跑)
# r 重载 tmux 配置(我们配的)
# z 当前面板最大化/还原
# [ 进入滚动/复制模式(配合 vim 键位)5. 对比辨析表
| 维度 | Ghostty(终端模拟器) | tmux(终端复用器) |
|---|---|---|
| 是什么 | GUI 程序,画窗口 | Shell 里跑的命令行程序 |
| 运行在哪 | 直接是那个”终端窗口” | 在终端窗口里面跑 |
| 关掉窗口 | 里面进程死掉 | 会话继续后台跑(可重连) |
| 分屏/标签 | 原生支持,渲染好 | 也支持,但观感朴素 |
| 远程服务器 | 服务器上没有 Ghostty | SSH 上去就能用,不可替代 |
| 脚本化 | 主要是交互,配置靠 config 文件 | 可被脚本精确控制 |
| 快捷键前缀 | Cmd 系 | Ctrl+b 系 |
易混点:“分屏” Ghostty 能做,tmux 也能做。本地临时看两个东西,用 Ghostty 原生分屏更顺;远程持久化、断线恢复,只能用 tmux 分屏。
6. 典型工作流(本机已配好)
我们已在你机器上配好一套”本地 Ghostty + 持久化 tmux”工作流,核心是两个 zsh 函数(写在 ~/.zshrc):
# tt —— 本地接入/新建 tmux 会话(默认叫 main)
tt # 接入 main;没有就新建
tt dev # 接入名为 dev 的会话
# 脱离:前缀 + d ;下次直接再敲 tt 就回来了
# sshx —— SSH 到远程并接入/新建 tmux(断网也不丢)
sshx myserver # SSH 进去进 main 会话
sshx myserver train # 指定会话名日常组合方式:
- 开一个 Ghostty 窗口,
Cmd+T开多个标签页。 - 需要本地持久化的标签页,敲
tt进入 tmux。 - 需要连服务器的标签页,敲
sshx myserver。 - 会话内部用 tmux 分屏(
前缀+\|竖、前缀+-横)同时看代码和日志。 - 下班/断网:直接关 Ghostty。程序都还在——本地在 tmux 里、远程在服务器的 tmux 里。下次打开再
tt/sshx即可恢复。
配套配置(已写入,无需手敲):
~/.config/ghostty/config:term = xterm-256color(让 tmux 真彩色生效)+ 主题/原生分屏保持原样。~/.tmux.conf:真彩色、鼠标支持、vim 风格h/j/k/l导航、直观分屏键、Catppuccin Mocha 状态栏、前缀+r重载配置。
一个版本坑(已规避):当前 Ghostty 的
new_tab动作不接受命令参数,所以没法把”按一个键自动开标签页并跑 tmux”绑成快捷键(会报InvalidFormat)。因此我们用终端里的tt/sshx命令接入——版本无关、最稳。若你硬想让”每个新标签页都进 tmux”,可在~/.config/ghostty/config末尾取消注释command = tmux attach ...(但通常不推荐,会连原生分屏也套上 tmux)。
7. 常见误区
-
❌ “Ghostty 和 tmux 是一个东西,装一个就行。” → 不是。Ghostty 是窗口,tmux 是窗口里的持久化管理器。前者管显示,后者管会话存活。
-
❌ “tmux 的分屏和 Ghostty 的分屏重复了,二选一。” → 功能重叠但目的不同:Ghostty 分屏为了本地看得爽,tmux 分屏为了远程断线不丢。可以一层套一层(Ghostty 分屏里再跑 tmux)。
-
❌ “关掉终端窗口,tmux 里的程序就停了。” → 错。tmux 的精髓就是关窗不断线。要停程序得
tmux kill-session或在会话里Ctrl+C退出进程。 -
❌ “SSH 上去跑训练,挂着不关就没事。” → 只要 SSH 连接断开(网络抖、合盖、睡眠),没用 tmux 包裹的进程基本会被杀掉。远程长任务务必
sshx进 tmux 再跑。 -
❌ “tmux 前缀键 Ctrl+b 和 Ghostty 快捷键会打架。” → 不会。Ghostty 用
Cmd系,tmux 用Ctrl+b系,修饰键完全不同。
8. 延伸阅读 / 关联概念
- tmux 官方文档:https://github.com/tmux/tmux/wiki
- Ghostty 配置文档:https://ghostty.org/docs/config
- 同仓库相关:
command/brew.md(装软件,含 Ghostty 的brew install --cask ghostty) - 进阶:tmux 插件管理器
tpm、状态栏主题catppuccin/tmux、Ghostty 的shell-integration与 OSC 52 剪贴板同步