Zellij — Rust 写的现代终端复用器,开箱即用还能写 WebAssembly 插件
是什么
Zellij 是一个 terminal multiplexer(终端多路复用器),和 tmux / GNU screen 是同一类工具。日常类比:你的终端窗口本来只能开一个工作台,Zellij 给你装上一个机柜——同一个窗口里能塞下多个会话,每个会话能切成多个标签页,每个标签页还能上下左右分屏。
它和 tmux 解决同一个问题,但选了不同的”风味”:
- 用 Rust 写的(tmux 是 C)
- 打开就能用——屏幕底部一直显示快捷键提示栏,不用背 prefix key
- WebAssembly 插件系统——任何能编译到 wasm 的语言都能写插件
- 支持浮动面板和堆叠面板这两种 tmux 没有的布局
一句话:tmux 的现代继任者候选之一,主打”少配置就好用”。
为什么重要
不用 multiplexer 的人会被这些事卡住:
- SSH 跑长任务必须挂着不能关电脑
- 本地写代码不停
Cmd+T开新终端,鼠标点来点去 - 想给同事看一段 log 只能截图
tmux 30 多年生态扎实,但有学习门槛——必须读 man tmux、改 .tmux.conf、装 tpm 插件管理器。Zellij 把”开箱体验”作为头等公民:
- 第一次启动就能用,底部提示栏教你怎么操作
- 配置文件用 KDL 语法(一种现代化的层级配置格式)
- 插件不再是 shell 脚本拼出来的——是真正的 wasm 二进制
核心要点
Zellij 的世界由三层嵌套组成,从大到小:
- session(会话):一整套工作区,可以 detach(脱离)和 attach(重连)
- tab(标签):会话里的 tab,类比浏览器多 tab
- pane(面板):tab 内的分屏块
特色概念:
- floating pane:悬浮在其他面板上方的临时窗口,按一下快捷键就出现,再按一下就藏起来。日常类比:像 macOS 的 Spotlight 弹窗
- stacked pane:多个面板堆叠在同一区域,只显示当前层,类比一摞窗口卡片
- layout:用 KDL 文件描述”开几个 tab、每个 tab 怎么分屏、跑什么命令”——一键还原工作区
- plugin:跑在 wasm 沙箱里的小程序,可以写状态栏、文件树、Git 集成
底层架构和 tmux 一样是 server-client:第一次敲 zellij 起一个后台进程(daemon),后续终端通过 socket 连过去。所以关终端不会杀掉会话。
实践案例
案例 1:第一次启动就能用
brew install zellij # 或 cargo install zellijzellij # 直接进底部提示栏长这样:
Ctrl + <g> LOCK <p> PANE <t> TAB <s> SESSION <h> MOVE <o> OPTIONS不用背——按 Ctrl-p 进 pane 模式,里面会再弹一层提示告诉你怎么分屏。
案例 2:远程跑训练不怕断网
ssh you@remote-gpu-boxzellij --session trainpython train.py # 跑起来# 按 Ctrl-o 然后按 d —— detachexit # 关 SSH第二天回来:
ssh you@remote-gpu-boxzellij attach train # 屏幕还原案例 3:用 layout 一键开发环境
~/.config/zellij/layouts/dev.kdl:
layout { tab name="code" { pane command="nvim" pane split_direction="vertical" { pane command="cargo" { args "watch" "-x" "test"; } pane } } tab name="logs" { pane command="tail" { args "-f" "app.log"; } }}启动:zellij --layout dev——nvim、cargo watch、tail 一次拉起来,分屏布局自动还原。
配置文件
~/.config/zellij/config.kdl 例子:
// 鼠标支持(点 pane 切换、滚轮滚屏)mouse_mode true
// 主题theme "catppuccin-mocha"
// 默认 shelldefault_shell "fish"
// 关闭底部提示栏(熟练后想要更多屏幕空间)default_mode "locked"KDL 语法:层级用大括号,属性用空格分隔,注释用 //。比 YAML 严格、比 JSON 友好。
踩过的坑
-
快捷键和 shell 撞:默认
Ctrl-q和Ctrl-g等组合在 readline 里有别的含义。改keybinds段或者用 lock mode 临时让 zellij 让出键盘 -
插件生态小:tmux 有 tpm 几百个插件,Zellij 才几十个能用的。需要的插件可能要自己写
-
嵌套 zellij:本地 zellij + SSH 后又开远程 zellij,快捷键全撞。约定远程改 prefix 或用 lock mode
-
KDL 学习成本:和 YAML/TOML 都不一样,第一次配会找文档。但学完之后比 tmux 的 DSL 好读
-
资源占用:daemon 进程内存比 tmux 高一些(Rust + wasm runtime),老机器上能感觉到
适用 vs 不适用场景
适用:
- 想要 terminal multiplex 但不愿花一周配 tmux 的新人
- 写插件需要类型安全和现代语言(Rust / Go / TypeScript 编到 wasm)
- 团队共用配置——KDL 文件比 tmux DSL 更易读
- 喜欢看到提示栏、不想背快捷键
不适用:
- 老服务器只能装 apt 包但 Zellij 没进发行版默认仓库
- 已经把 tmux 配置打磨多年,迁移成本高
- 极简主义者——想要 5MB 二进制 + 零依赖(tmux 更适合)
- 需要 GUI 拖拽分屏——终端模拟器(WezTerm / Kitty)更顺手
替代品对比
- tmux:30 年老牌,生态最大,配置门槛也最高。远程长任务首选
- GNU screen:1987 年起,仍能用。语法老、社区萎缩
- WezTerm / Kitty:终端模拟器内置 multiplex,但不能 detach——关了就没
- dvtm + abduco:极简风格,分别处理 multiplex 和 detach
经验法则:第一次接触 multiplexer 选 Zellij;远程重度使用选 tmux;只想本地分屏选终端模拟器自带的。
学到什么
- 开箱即用 vs 极致可定制是工具设计的两条路。tmux 选了第二条 30 年,Zellij 在第一条上挑战它
- WebAssembly 当插件运行时是新趋势——沙箱安全、跨语言、可分发。除了 Zellij,Figma 插件、Envoy、Istio 都在用
- 底部提示栏是降低学习曲线的小但关键的设计——把”必须背”变成”看着抄”
- 配置即代码:KDL 布局文件让”我每天的工作环境”变成可版本控制的文本
历史小故事(可跳过)
- 2020 年:Aram Drevekenin(GitHub 用户名 imsnif)启动 Zellij 项目,最初叫
mosaic - 2021 年:改名 Zellij(摩洛哥传统几何拼贴艺术),表达”把屏幕拼成图案”的意象
- 2022 年:v0.20 引入 wasm 插件系统,成为第一个用 WebAssembly 当插件运行时的 multiplexer
- 2023-2026:陆续加入 floating pane、stacked pane、web-client、multiplayer 模式
- 现在:33k+ GitHub star,v0.44 还没到 1.0,但日常使用已稳定
延伸阅读
- 官方仓库:zellij-org/zellij
- 官网:zellij.dev(带交互式 demo)
- 插件开发指南:Plugin SDK
- KDL 语法:kdl.dev
- tmux —— Zellij 的对照组,30 年老牌
- nushell —— 同样用 Rust 重写老工具的代表