起因
ssh 远程开发 + 本地多窗口工作流,需要:
- 多终端面板(split / 切换)
- detach 重连(断网不丢 session)
- 持久化布局
tmux 是事实标准 20 年。zellij(Rust,2021+)是现代挑战者。
最近重度用 zellij 一个月。下面对比。
tmux
经典 + 普遍可用。
brew install tmux
apt install tmux
~/.tmux.conf 配色 / 键位 / 插件。
操作
prefix = Ctrl-b(默认)
prefix + c 新 window
prefix + n 下个 window
prefix + % 横分 pane
prefix + " 竖分 pane
prefix + d detach session
prefix + [ 进 copy mode(scroll)
tmux ls 列 session,tmux attach -t <name> 接回。
优势
- 最广泛可用:所有 Linux distro / macOS / *BSD 包管理都有
- 极成熟(2007 至今)
- 插件生态丰富(tpm + 几千插件)
- 资源占用小(< 5 MB)
- session 持久化 + tmux-resurrect 保存恢复
劣势
- 默认配色 / 键位丑陋复古,要花时间配
- 学习曲线陡(前 1 小时挫败感强)
- 配置文件语法奇特
- 无内置浮窗(3.2+ popup 比较基础)
zellij
brew install zellij
cargo install zellij
启动直接 zellij。
操作
底部有状态栏显示当前 mode 和键位 → 不用记!
Ctrl + p pane mode(split / resize)
Ctrl + t tab mode(多 tab)
Ctrl + s scroll mode
Ctrl + o session mode(detach 等)
Ctrl + n resize mode
Ctrl + h move mode
进 mode 后状态栏显示可用键,按数字 / 字母执行。
优势
- 新手友好:状态栏永远显示能做什么
- 默认配色现代 + 美观
- 内置 layout(KDL config)
- 内置 floating pane / sticky pane
- WASM 插件(Rust / Go 写插件)
- 性能极好(Rust)
劣势
- 还年轻(兼容性 / 生态比 tmux 弱)
- 老服务器没有(apt 包要等 24.04)
- 远程 ssh 渲染偶有小问题
- 内存占用更大(30-80 MB vs tmux 5 MB)
配色 / layout 对比
tmux 默认:
[0] 0:bash- 1:vim*
"myhost" 14:23 25-Apr-24
朴素绿色 bar,要配 powerline / status-utf8 才好看。
zellij 默认:
zellij_session TAB: 1 Bash 2 Vim
─────────────────────────────────────
(panes)
─────────────────────────────────────
Ctrl+p PANE Ctrl+t TAB Ctrl+s SCROLL Ctrl+o SESSION
底部 hint bar 直接告诉你下一步。
配置文件
tmux .tmux.conf:
set -g prefix C-a
unbind C-b
bind C-a send-prefix
set -g mouse on
set -g history-limit 50000
# split with intuitive keys
bind | split-window -h
bind - split-window -v
# vim-style pane nav
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# plugin manager
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-resurrect'
run '~/.tmux/plugins/tpm/tpm'
zellij ~/.config/zellij/config.kdl:
keybinds {
normal {
bind "Ctrl g" { SwitchToMode "Locked"; }
}
}
theme "nord"
simplified_ui false
default_layout "compact"
mouse_mode true
KDL 比 tmux 自定义语法人类友好得多。
layout file(强项)
zellij:
// dev.kdl
layout {
tab name="editor" {
pane command="nvim"
}
tab name="server" {
pane split_direction="vertical" {
pane command="pnpm" { args "dev"; }
pane command="docker" { args "compose" "logs" "-f"; }
}
}
tab name="test" {
pane command="pnpm" { args "test" "--watch"; }
}
}
启动:
zellij --layout dev.kdl
一键开 3 tab / 多 pane 各跑特定命令。
tmux 等价是 shell script + tmux send-keys → 又长又脆。
远程 ssh 注意
tmux:远程跑 tmux + 本地 ssh 进去 attach。断网 → 进程不丢。
zellij:同样可以,但 zellij 用更多 ANSI escape → 慢网络上重绘
更明显。
我远程仍用 tmux。本地 zellij。
我现在的工作流
- 远程服务器:tmux(兼容性 / 速度 + 几乎所有服务器都装好)
- 本地 macOS:zellij(视觉好 + layout file 项目自动布局)
- 跨 ssh 项目:zellij 本地嵌套(zellij outer + tmux inner on remote)
内存 / 启动
# tmux: ~3 MB resident
# zellij: ~30 MB resident
# zellij 启动 ~ 100ms vs tmux ~ 20ms
500 倍 memory 差距听起来吓人,绝对数都很小。除非 1 GB 小机器
(树莓派 / 老 VPS)不是问题。
共享 session(远程 pairing)
tmux:tmux a -t name(多终端 attach 同 session,看到同样画面)。
zellij:zellij attach <session> 同样支持。
zellij 还有 zellij --new-session-with-layout,新人加入直接套布局。
替代品快览
- screen:祖宗,纯 80 年代风格,今天没人新装
- wezterm:终端 emulator + 内置 multiplexer(可替代 zellij/tmux)
- kitty:终端 emulator,有窗口管理但不是 multiplexer
如果你想"一个工具搞定终端 + multiplex" → wezterm。
传统派 → tmux/zellij 跟终端解耦。
决策
- 新人 / 个人 → zellij(学习曲线低)
- 远程 ssh / 老 server → tmux(兼容)
- 重 layout 配置 → zellij(KDL layout file)
- 重 plugin → tmux(生态成熟)
- 极简资源 → tmux
踩过的坑
-
zellij + 24-bit color 终端报错:老终端不支持 truecolor。
TERM=xterm-256color或者用 alacritty / kitty / wezterm。 -
zellij 复制到系统剪贴板:默认 OSC 52 escape。某些终端不支持 →
要配copy_command "pbcopy"(mac) /xclip。 -
tmux 2.x vs 3.x:服务器装的 tmux 2.x 没 popup / 某些新 feature。
ssh 远程时小心。 -
嵌套 multiplex 键冲突:本地 zellij + 远程 tmux → prefix 键冲突。
把 inner 的 prefix 改成不同(C-avsC-b)。 -
.tmux.conf编辑要 source:改完不会自动重载。
tmux source ~/.tmux.conf,或者prefix + rbind 一下。
登录后参与评论。