
Zellij 和 tmux 都是终端复用器：它们把一个终端窗口拆成多个工作区域，并允许会话在断开后继续存在。区别不在「能不能分屏」，而在默认交互模型。

Zellij 默认更像一个带状态提示的终端工作台：它有可见的 tab bar、status bar、mode 提示、布局系统和插件入口。tmux 默认更像一个小而稳定的终端会话层：一个 prefix 键进入命令空间，其余时候尽量不接管输入。

这篇文章基于 [Zellij User Guide: Keybinding Presets](https://zellij.dev/documentation/keybinding-presets.html)、[Zellij User Guide: Keybindings](https://zellij.dev/documentation/keybindings.html)、[Zellij 默认配置](https://github.com/zellij-org/zellij/blob/main/zellij-utils/assets/config/default.kdl) 和 [tmux(1) manual](https://man7.org/linux/man-pages/man1/tmux.1.html) 整理。

## 核心区别

### 1. 快捷键模型不同

Zellij 的默认 preset 是 mode-based。官方文档里给的例子是：在 normal mode 下按 `Ctrl p` 进入 Pane mode，再按 `n` 创建 pane，或者按 `x` 关闭当前 pane。

也就是说，Zellij 常见操作是：

```text
Ctrl p -> n    新建 pane
Ctrl p -> x    关闭 pane
Ctrl t -> n    新建 tab
Ctrl o -> d    detach session
```

tmux 的默认模型是 prefix-based。tmux manual 明确写默认 prefix 是 `C-b`，也就是 `Ctrl b`。常见操作是：

```text
Ctrl b -> "    上下分屏
Ctrl b -> %    左右分屏
Ctrl b -> c    新建 window
Ctrl b -> d    detach session
```

从 Zellij 切到 tmux，最重要的肌肉记忆变化是：从「先进入某个 mode」切换为「先按 prefix，然后按命令键」。

### 2. 名词大体对应，但边界不同

| 概念 | Zellij | tmux | 迁移时怎么理解 |
|---|---|---|---|
| 会话 | session | session | 基本等价，都是可 detach / attach 的工作现场 |
| 标签页 | tab | window | Zellij 的 tab 对应 tmux 的 window |
| 分屏 | pane | pane | 基本等价 |
| 布局 | layout / swap layout | layout | Zellij 更强调声明式 layout 和插件；tmux 更常用命令和配置拼出来 |
| 快捷键入口 | mode，比如 Pane、Tab、Session | prefix，默认 `Ctrl b` | Zellij 是多个入口；tmux 是一个主入口 |
| UI 提示 | 默认明显 | 默认较少 | tmux 需要靠 `Ctrl b ?` 查看快捷键 |

### 3. Zellij 默认带 tmux 兼容入口

Zellij 的默认配置里有一个 `tmux` mode，并且在非 locked mode 下绑定了：

```kdl
bind "Ctrl b" { SwitchToMode "Tmux"; }
```

进入这个 mode 后，Zellij 内置了一批 tmux 风格绑定，例如：

```text
Ctrl b -> "      下方新建 pane
Ctrl b -> %      右侧新建 pane
Ctrl b -> c      新建 tab
Ctrl b -> ,      重命名 tab
Ctrl b -> p/n    上一个 / 下一个 tab
Ctrl b -> h/j/k/l 或方向键    移动焦点
Ctrl b -> d      detach
Ctrl b -> x      关闭当前 pane
Ctrl b -> z      当前 pane 全屏
Ctrl b -> [      进入 scroll mode
```

所以，在继续使用 Zellij 的同时，也可以直接开始使用 `Ctrl b` 这一套来提前适应 tmux。它不是完整 tmux，但足够覆盖分屏、tab、移动焦点、detach 这些高频动作。

## 如何很快从 Zellij 切换到 tmux

### 第一步：先把 mental model 换掉

记住三组对应关系就够了：

```text
Zellij session -> tmux session
Zellij tab     -> tmux window
Zellij pane    -> tmux pane
```

然后把常用动作收敛到 tmux 的 prefix：

```text
所有 tmux 内部操作，先按 Ctrl b
```

### 第二步：只背 10 个快捷键

刚切换时不要背完整表。先把下面这些用熟：

| 目标 | Zellij 默认 | tmux 默认 |
|---|---|---|
| detach | `Ctrl o` `d` | `Ctrl b` `d` |
| 新建 tab/window | `Ctrl t` `n` | `Ctrl b` `c` |
| 关闭 tab/window | `Ctrl t` `x` | `Ctrl b` `&` |
| 上一个 tab/window | `Ctrl t` `h` / `k` | `Ctrl b` `p` |
| 下一个 tab/window | `Ctrl t` `l` / `j` | `Ctrl b` `n` |
| 按编号切换 | `Ctrl t` `1..9` | `Ctrl b` `0..9` |
| 下方分屏 | `Ctrl p` `d` | `Ctrl b` `"` |
| 右侧分屏 | `Ctrl p` `r` | `Ctrl b` `%` |
| 关闭 pane | `Ctrl p` `x` | `Ctrl b` `x` |
| pane 全屏/恢复 | `Ctrl p` `f` | `Ctrl b` `z` |
| 移动 pane 焦点 | `Ctrl p` `h/j/k/l` | `Ctrl b` `方向键`，也可配置 `h/j/k/l` |
| 查看快捷键 | 看 status bar / 配置页 | `Ctrl b` `?` |

### 第三步：用 tmux 命令替代 Zellij session 管理

Zellij 常见是：

```bash
zellij
zellij attach <session>
zellij list-sessions
```

tmux 对应可以这样用：

```bash
# 创建一个具名 session
tmux new -s work

# detach 后重新进入
tmux attach -t work

# 列出 session
tmux ls

# 关闭指定 session
tmux kill-session -t work
```

tmux manual 也说明了：不带命令启动时，默认行为等价于创建新 session；在 session 内可以用 `Ctrl b d` detach，再用 `tmux attach-session` 重新连接。

### 第四步：给 tmux 加一个最小配置

如果已经习惯 Zellij 的 `h/j/k/l` 移动焦点、鼠标操作和更直观的分屏键，可以先用下面这个最小 `.tmux.conf`：

```tmux
# 保留默认 prefix: Ctrl b

# 更直观的分屏键
bind | split-window -h
bind - split-window -v

# Vim 风格 pane 移动
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# 快速 reload 配置
bind r source-file ~/.tmux.conf \; display-message "tmux.conf reloaded"

# 鼠标选择 pane/window、拖动调整大小
set -g mouse on

# copy-mode 使用 vi 键位
setw -g mode-keys vi

# 从 1 开始编号，更接近 Zellij 的 tab 编号直觉
set -g base-index 1
setw -g pane-base-index 1
set -g renumber-windows on
```

应用配置：

```bash
tmux source-file ~/.tmux.conf
```

如果更偏好 GNU screen 风格，或者认为 `Ctrl a` 更容易按，可以把 prefix 改成 `Ctrl a`。tmux manual 里也给了这个例子：

```tmux
set-option -g prefix C-a
unbind-key C-b
bind-key C-a send-prefix
```

不过，刚从 Zellij 切到 tmux 时，建议先保留 `Ctrl b`。原因很简单：Zellij 默认就提供 `Ctrl b` 的 tmux mode，迁移期间两边可以共用同一套核心肌肉记忆。

## 常用快捷键速查

### tmux 默认高频键

下面所有键都先按 `Ctrl b`：

| 按键 | 作用 |
|---|---|
| `?` | 查看当前 key bindings |
| `d` | detach 当前 client |
| `c` | 创建 window |
| `,` | 重命名 window |
| `&` | 关闭 window |
| `n` | 下一个 window |
| `p` | 上一个 window |
| `0..9` | 切换到指定 window |
| `"` | 上下分屏 |
| `%` | 左右分屏 |
| `x` | 关闭 pane |
| `z` | pane zoom / restore |
| `方向键` | 移动 pane 焦点 |
| `o` | 切到下一个 pane |
| `;` | 回到上一个 active pane |
| `[` | copy mode / 查看历史 |
| `]` | 粘贴最近 buffer |
| `:` | 进入 tmux command prompt |
| `Space` | 切换到下一个预设 layout |

tmux manual 里还提到，`Ctrl-Up/Down/Left/Right` 默认按 1 cell 调整 pane 大小，`Alt-Up/Down/Left/Right` 默认按 5 cells 调整。

### Zellij 默认高频键

下面是 Zellij 默认 preset 的高频入口：

| 按键 | mode / 动作 |
|---|---|
| `Ctrl p` | Pane mode |
| `Ctrl t` | Tab mode |
| `Ctrl o` | Session mode |
| `Ctrl s` | Scroll mode |
| `Ctrl n` | Resize mode |
| `Ctrl h` | Move mode |
| `Ctrl g` | Locked mode |
| `Ctrl q` | Quit |
| `Alt n` | 新建 pane |
| `Alt h/j/k/l` | 移动焦点 |
| `Alt =` / `Alt -` | 调整 pane 大小 |
| `Alt [` / `Alt ]` | 切换 swap layout |

Pane mode 里常用：

| 按键 | 作用 |
|---|---|
| `n` | 新建 pane |
| `d` | 下方新建 pane |
| `r` | 右侧新建 pane |
| `x` | 关闭 pane |
| `f` | pane 全屏/恢复 |
| `h/j/k/l` | 移动焦点 |
| `w` | 显示/隐藏 floating panes |
| `z` | 显示/隐藏 pane frames |

Tab mode 里常用：

| 按键 | 作用 |
|---|---|
| `n` | 新建 tab |
| `x` | 关闭 tab |
| `r` | 重命名 tab |
| `h/k` | 上一个 tab |
| `l/j` | 下一个 tab |
| `1..9` | 跳到指定 tab |
| `s` | 同步输入到当前 tab 的 panes |

Session mode 里常用：

| 按键 | 作用 |
|---|---|
| `d` | detach |
| `w` | 打开 session-manager |
| `c` | 打开 configuration |
| `p` | 打开 plugin-manager |
| `l` | 打开 layout-manager |

## 什么时候继续用 Zellij，什么时候换 tmux

更适合继续用 Zellij 的情况：

1. 偏好默认可见的快捷键提示，不想从空白状态栏开始配。
2. 依赖 layout、插件、floating pane、session resurrection 这类内置体验。
3. 经常需要演示或共享终端工作区，希望 UI 状态更直观。

更适合切到 tmux 的情况：

1. 主要需要稳定、通用、远程机器上容易安装的 session/pane/window 管理。
2. 希望默认行为尽量少接管快捷键，配置完全由使用者控制。
3. 已经在 shell、编辑器、SSH、服务器环境里长期使用 prefix-based 工具。

## Ghostty 中使用 Zellij

如果终端模拟器使用 Ghostty，还会遇到另一类问题：`Alt+Right` 可能被 Ghostty 转成 `Esc f`，从而在 Zellij 里误触发 `Alt+f` 的 floating pane；Zellij 开启 `mouse_mode` 后，链接点击也需要使用 `Cmd+Shift+Click`。

这部分和 tmux 迁移不是同一个主题，单独整理在 [Ghostty 和 Zellij 配合使用：快捷键、鼠标和链接点击配置](/blog/ghostty-zellij-keybindings-mouse-links/)。

实践上的迁移建议是：不要一上来复制一份巨大的 tmux 配置。先用默认 `Ctrl b` 跑一周，只加鼠标、`h/j/k/l` 移动和分屏别名。等到确实发现痛点，再逐项加配置。这样迁移成本最低，也最容易判断哪些能力是真需求。

