zellij vs tmux:终端多路复用器选哪个

起因

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

踩过的坑

  1. zellij + 24-bit color 终端报错:老终端不支持 truecolor。
    TERM=xterm-256color 或者用 alacritty / kitty / wezterm。

  2. zellij 复制到系统剪贴板:默认 OSC 52 escape。某些终端不支持 →
    要配 copy_command "pbcopy" (mac) / xclip

  3. tmux 2.x vs 3.x:服务器装的 tmux 2.x 没 popup / 某些新 feature。
    ssh 远程时小心。

  4. 嵌套 multiplex 键冲突:本地 zellij + 远程 tmux → prefix 键冲突。
    把 inner 的 prefix 改成不同(C-a vs C-b)。

  5. .tmux.conf 编辑要 source:改完不会自动重载。
    tmux source ~/.tmux.conf,或者 prefix + r bind 一下。

精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。