Zellij: Rust 编写的现代终端复用器¶
为什么要学 Zellij¶
tmux 是终端复用的事实标准,但它的学习曲线陡峭,配置复杂,默认快捷键不直观。Zellij 用 Rust 重写了终端复用器,目标是降低使用门槛的同时保持强大功能。
| 痛点 | tmux | Zellij |
|---|---|---|
| 上手难度 | 高(需要记忆大量前缀键组合) | 低(底部提示栏显示可用操作) |
| 默认体验 | 需要大量配置 | 开箱即用 |
| 布局管理 | 手动调整 | KDL 格式预定义布局文件 |
| 插件系统 | 无(脚本式扩展) | WebAssembly 插件 |
| 浮动窗格 | 无 | 支持浮动窗格 |
| 语言 | C | Rust |
| 配置格式 | 自定义语法 | KDL |
Zellij 特别适合两类人: 1. 从未用过终端复用器,想找一个好上手的 2. 用过 tmux 但厌倦了折腾配置
核心概念¶
白话解释¶
终端复用器的核心功能是让你在一个终端窗口里运行多个终端会话。想象你有一个物理屏幕,终端复用器帮你把它分成多个小屏幕,每个小屏幕独立运行命令。
Zellij 的组织层级:
核心概念表¶
| 概念 | 说明 | 类比 |
|---|---|---|
| Session | 一个持久化的工作空间 | 一个项目的所有窗口 |
| Tab | 一组窗格的集合 | 浏览器标签页 |
| Pane | 一个独立的终端实例 | 一个终端窗口 |
| Floating Pane | 悬浮在其他窗格之上的窗格 | 弹出窗口 |
| Layout | 预定义的窗格排列方式 | 窗口布局模板 |
| Mode | 操作模式(类似 Vim 的模态) | Vim 的 Normal/Insert |
| Plugin | WebAssembly 编写的扩展 | 插件 |
| Strider | 内置的文件管理器插件 | 文件浏览器侧边栏 |
Zellij 的模式系统¶
Zellij 使用模式(Mode)来组织快捷键,避免快捷键冲突:
| 模式 | 进入方式 | 用途 |
|---|---|---|
| Normal | 默认 | 正常使用终端 |
| Locked | Ctrl+G | 锁定,所有 Zellij 快捷键禁用 |
| Pane | Ctrl+P | 窗格管理(新建/移动/关闭) |
| Tab | Ctrl+T | 标签页管理 |
| Resize | Ctrl+N | 调整窗格大小 |
| Move | Ctrl+H | 移动窗格位置 |
| Scroll | Ctrl+S | 滚动和搜索 |
| Session | Ctrl+O | 会话管理 |
| Tmux | Ctrl+B | tmux 兼容快捷键 |
安装配置¶
安装方式¶
macOS
Linux
# Arch Linux
pacman -S zellij
# 通过 Cargo
cargo install --locked zellij
# 直接下载二进制
curl -L https://github.com/zellij-org/zellij/releases/latest/download/zellij-x86_64-unknown-linux-musl.tar.gz | tar xz
sudo mv zellij /usr/local/bin/
配置文件¶
// ~/.config/zellij/config.kdl
// 主题
theme "catppuccin-mocha"
// 默认模式
default_mode "normal"
// 默认布局
default_layout "compact"
// 鼠标支持
mouse_mode true
// 简化 UI
simplified_ui false
// 底部提示栏
pane_frames true
// 复制到系统剪贴板
copy_on_select true
copy_command "xclip -selection clipboard" // Linux
// copy_command "pbcopy" // macOS
// 空闲超时(秒)
scrollback_lines_to_serialize 10000
// 主题自定义
themes {
my-theme {
fg "#c0caf5"
bg "#1a1b26"
black "#15161e"
red "#f7768e"
green "#9ece6a"
yellow "#e0af68"
blue "#7aa2f7"
magenta "#bb9af7"
cyan "#7dcfff"
white "#a9b1d6"
orange "#ff9e64"
}
}
自定义快捷键¶
// ~/.config/zellij/config.kdl (续)
keybinds {
// 在 Normal 模式下的自定义绑定
normal {
bind "Alt h" { MoveFocusOrTab "Left"; }
bind "Alt l" { MoveFocusOrTab "Right"; }
bind "Alt j" { MoveFocus "Down"; }
bind "Alt k" { MoveFocus "Up"; }
bind "Alt n" { NewPane; }
bind "Alt t" { NewTab; }
}
// 覆盖 tmux 模式的绑定
tmux {
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
}
}
快速上手¶
启动 Zellij¶
# 直接启动
zellij
# 以指定名称创建会话
zellij -s my-project
# 使用特定布局启动
zellij --layout dev
# 附加到已有会话
zellij attach my-project
# 列出所有会话
zellij list-sessions
# 简写
zellij ls
基本操作(Normal 模式)¶
窗格操作 (Ctrl+P 进入 Pane 模式)
| 按键 | 功能 |
|---|---|
Ctrl+P 然后 n | 新建窗格(向下分屏) |
Ctrl+P 然后 d | 新建窗格(向右分屏) |
Ctrl+P 然后 x | 关闭当前窗格 |
Ctrl+P 然后 f | 全屏切换当前窗格 |
Ctrl+P 然后 w | 新建浮动窗格 |
Ctrl+P 然后 e | 在嵌入/浮动之间切换 |
Alt+n | 快捷新建窗格 |
Alt+hjkl | 快捷切换窗格方向 |
标签页操作 (Ctrl+T 进入 Tab 模式)
| 按键 | 功能 |
|---|---|
Ctrl+T 然后 n | 新建标签页 |
Ctrl+T 然后 x | 关闭当前标签页 |
Ctrl+T 然后 r | 重命名标签页 |
Ctrl+T 然后 h/l | 切换到前/后一个标签页 |
Ctrl+T 然后 1-9 | 跳转到指定标签页 |
滚动和搜索 (Ctrl+S 进入 Scroll 模式)
| 按键 | 功能 |
|---|---|
Ctrl+S 然后 j/k | 上下滚动 |
Ctrl+S 然后 d/u | 半页滚动 |
Ctrl+S 然后 s | 进入搜索模式 |
Ctrl+S 然后 e | 在编辑器中打开滚动缓冲区 |
典型工作流¶
# 1. 创建项目会话
zellij -s my-web-app
# 2. 底部提示栏显示可用操作
# 按 Ctrl+P → 显示窗格操作选项
# 按 d → 向右分屏
# 3. 左侧编辑代码
vim src/main.rs
# 4. 右侧运行程序
# Ctrl+P → n → 向下分屏
cargo run
# 5. 右下角看日志
tail -f app.log
# 6. 断开连接(SSH 断开后会话不丢失)
zellij detach
# 或 Ctrl+O → d
# 7. 重新连接
zellij attach my-web-app
进阶用法¶
自定义布局¶
布局是 Zellij 的强大功能,用 KDL 格式定义:
// ~/.config/zellij/layouts/dev.kdl
layout {
// 默认分屏方向
default_tab_template {
pane size=1 borderless=true {
plugin location="tab-bar"
}
children
pane size=2 borderless=true {
plugin location="status-bar"
}
}
tab name="editor" focus=true {
pane split_direction="vertical" {
pane name="code" size="70%" {
command "hx"
args "."
}
pane split_direction="horizontal" {
pane name="terminal" size="60%"
pane name="logs" {
command "tail"
args "-f" "app.log"
}
}
}
}
tab name="git" {
pane {
command "lazygit"
}
}
tab name="docs" {
pane
}
}
使用布局启动:
浮动窗格¶
浮动窗格悬浮在其他内容之上,适合临时操作:
使用场景: - 临时查看 Git 状态 - 快速运行一个命令 - 查看文档或帮助
WebAssembly 插件¶
Zellij 支持用 Rust 编写 WebAssembly 插件:
// 在布局中使用插件
layout {
pane split_direction="vertical" {
pane size="20%" {
plugin location="file:~/.config/zellij/plugins/my-plugin.wasm"
}
pane
}
}
内置插件: - tab-bar:标签栏 - status-bar:状态栏 - strider:文件管理器 - compact-bar:紧凑标签栏
会话管理¶
# 列出所有会话
zellij ls
# 附加到指定会话
zellij attach project-a
# 强制附加(踢掉其他连接)
zellij attach project-a --force-run-commands
# 删除会话
zellij delete-session project-a
# 删除所有会话
zellij delete-all-sessions
# 如果没有可用会话就创建新的
zellij attach -c my-session
tmux 兼容模式¶
如果你是 tmux 老用户,可以启用 tmux 兼容快捷键:
// config.kdl
keybinds {
// 使用 Ctrl+B 作为前缀键(和 tmux 一样)
tmux {
bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
bind "c" { NewTab; SwitchToMode "Normal"; }
bind "x" { CloseFocus; SwitchToMode "Normal"; }
bind "d" { Detach; }
}
}
与 Shell 集成¶
# 在 .bashrc 或 config.fish 中自动启动 Zellij
# Bash
if [ -z "$ZELLIJ" ]; then
zellij attach -c default
fi
# Fish
if not set -q ZELLIJ
zellij attach -c default
end
常见问题¶
Q1: Zellij 和 tmux 该选哪个?¶
| 场景 | 推荐 |
|---|---|
| 新手入门终端复用 | Zellij |
| 已有大量 tmux 配置 | 继续 tmux |
| 需要预定义布局 | Zellij |
| 需要浮动窗格 | Zellij |
| 需要 WebAssembly 插件 | Zellij |
| 服务器环境(通常已装 tmux) | tmux |
| 极致轻量 | tmux |
Q2: SSH 断开后会话还在吗?¶
是的,这是终端复用器的核心功能。Zellij 会话在后台持续运行,通过 zellij attach 重新连接。
Q3: 和终端模拟器的分屏冲突吗?¶
Ghostty/iTerm2 等终端模拟器自带分屏功能,和 Zellij 可以共存但有快捷键冲突。建议: - 使用 Ctrl+G 进入 Locked 模式,让 Zellij 放过所有快捷键 - 或者只用 Zellij 的分屏,禁用终端模拟器的分屏
Q4: 布局文件放在哪里?¶
Zellij 会自动搜索这个目录下的 .kdl 文件。
Q5: 如何复制文本?¶
- 鼠标选择文本后自动复制(需要开启
copy_on_select) - 进入 Scroll 模式 (
Ctrl+S),使用 Vim 风格的选择和复制 Ctrl+S→ 移动到起始位置 →v开始选择 → 移动 →y复制
Q6: Zellij 的性能和 tmux 相比?¶
Zellij 的内存占用略高于 tmux(Rust 运行时 vs C),但渲染性能在大多数场景下相当。对于大量输出(如 cat 大文件),两者都不会有明显差异。
参考资源¶
| 资源 | 链接 |
|---|---|
| 官方网站 | https://zellij.dev |
| GitHub 仓库 | https://github.com/zellij-org/zellij |
| 官方文档 | https://zellij.dev/documentation |
| 布局文档 | https://zellij.dev/documentation/layouts |
| 插件开发 | https://zellij.dev/documentation/plugins |
| KDL 语言 | https://kdl.dev |
总结:Zellij 是终端复用器领域的"现代化升级"。它的底部提示栏让新手不需要记忆任何快捷键就能上手,预定义布局和浮动窗格让工作流更高效。如果你在寻找 tmux 的替代品,或者第一次接触终端复用,Zellij 是当前最推荐的选择。