跳转至

Zellij: Rust 编写的现代终端复用器

为什么要学 Zellij

tmux 是终端复用的事实标准,但它的学习曲线陡峭,配置复杂,默认快捷键不直观。Zellij 用 Rust 重写了终端复用器,目标是降低使用门槛的同时保持强大功能

痛点tmuxZellij
上手难度高(需要记忆大量前缀键组合)低(底部提示栏显示可用操作)
默认体验需要大量配置开箱即用
布局管理手动调整KDL 格式预定义布局文件
插件系统无(脚本式扩展)WebAssembly 插件
浮动窗格支持浮动窗格
语言CRust
配置格式自定义语法KDL

Zellij 特别适合两类人: 1. 从未用过终端复用器,想找一个好上手的 2. 用过 tmux 但厌倦了折腾配置


核心概念

白话解释

终端复用器的核心功能是让你在一个终端窗口里运行多个终端会话。想象你有一个物理屏幕,终端复用器帮你把它分成多个小屏幕,每个小屏幕独立运行命令。

Zellij 的组织层级:

Session (会话)
└── Tab (标签页,类似浏览器标签)
    └── Pane (窗格,标签页内的分屏)
        └── 你的 Shell 或程序

核心概念表

概念说明类比
Session一个持久化的工作空间一个项目的所有窗口
Tab一组窗格的集合浏览器标签页
Pane一个独立的终端实例一个终端窗口
Floating Pane悬浮在其他窗格之上的窗格弹出窗口
Layout预定义的窗格排列方式窗口布局模板
Mode操作模式(类似 Vim 的模态)Vim 的 Normal/Insert
PluginWebAssembly 编写的扩展插件
Strider内置的文件管理器插件文件浏览器侧边栏

Zellij 的模式系统

Zellij 使用模式(Mode)来组织快捷键,避免快捷键冲突:

模式进入方式用途
Normal默认正常使用终端
LockedCtrl+G锁定,所有 Zellij 快捷键禁用
PaneCtrl+P窗格管理(新建/移动/关闭)
TabCtrl+T标签页管理
ResizeCtrl+N调整窗格大小
MoveCtrl+H移动窗格位置
ScrollCtrl+S滚动和搜索
SessionCtrl+O会话管理
TmuxCtrl+Btmux 兼容快捷键

安装配置

安装方式

macOS

brew install zellij

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/

配置文件

# 生成默认配置
zellij setup --dump-config > ~/.config/zellij/config.kdl
// ~/.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
    }
}

使用布局启动:

zellij --layout dev
# 或
zellij --layout ~/.config/zellij/layouts/dev.kdl

浮动窗格

浮动窗格悬浮在其他内容之上,适合临时操作:

Ctrl+P → w          打开浮动窗格
Ctrl+P → e          浮动 ↔ 嵌入切换
Ctrl+P → x          关闭浮动窗格
Alt+方向键           移动浮动窗格

使用场景: - 临时查看 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: 布局文件放在哪里?

~/.config/zellij/layouts/

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 是当前最推荐的选择。