ᕕ( ᐛ )ᕗ Jimyag's Blog

Zellij 和 tmux 的区别与迁移快捷键

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

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

这篇文章基于 Zellij User Guide: Keybinding PresetsZellij User Guide: KeybindingsZellij 默认配置tmux(1) manual 整理。

核心区别

1. 快捷键模型不同

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

也就是说,Zellij 常见操作是:

1
2
3
4
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。常见操作是:

1
2
3
4
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 下绑定了:

1
bind "Ctrl b" { SwitchToMode "Tmux"; }

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
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 换掉

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

1
2
3
Zellij session -> tmux session
Zellij tab     -> tmux window
Zellij pane    -> tmux pane

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

1
所有 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 常见是:

1
2
3
zellij
zellij attach <session>
zellij list-sessions

tmux 对应可以这样用:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 创建一个具名 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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 保留默认 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

应用配置:

1
tmux source-file ~/.tmux.conf

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

1
2
3
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 配合使用:快捷键、鼠标和链接点击配置

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

#Zellij #Tmux #Terminal #CLI