Zellij 是一款用 Rust 编写的现代化终端复用器(Terminal Multiplexer),目标是提供一个功能丰富、对新手友好的终端工作环境。它继承了 tmux 等经典工具的核心能力,同时在用户体验、插件生态和远程访问等方面做了大量改进。本文将带你了解终端复用器的基本概念,以及 Zellij 为什么值得关注。
一、什么是终端复用器
终端复用器是一种允许你在一个终端窗口中同时管理多个终端会话的工具。它将单个物理终端"复用"为多个虚拟终端,每个虚拟终端可以独立运行不同的程序。更关键的是,终端复用器可以让这些会话在后台持续运行——即使你关闭了终端窗口或断开了 SSH 连接,正在运行的程序也不会被中断。
Zellij 的核心功能包括:
- 多个面板和标签页:在一个终端窗口中分割出多个面板,每个面板运行独立的 shell;多个标签页可以组织不同的工作场景。
- 浮动面板:面板可以悬浮在当前布局之上,适合临时执行命令后关闭。
- 分离和恢复会话:将整个工作环境从终端分离,稍后随时恢复,断开 SSH 也不丢失进度。
- 浏览器远程访问:内置 Web 客户端,通过浏览器即可连接远程服务器上的 Zellij 会话。
- 插件系统:基于 WebAssembly(WASM)的插件架构,可以用任何编译为 WASM 的语言编写插件。
- CLI 脚本化:提供丰富的命令行接口,可以脚本化地创建布局、管理会话。
二、为什么选择 Zellij 而不是 tmux
tmux 是终端复用器领域的老牌工具,稳定可靠,生态成熟。但 Zellij 在多项能力上提供了开箱即用的支持,而 tmux 往往需要额外配置或第三方工具。以下是主要功能的对比:
| 功能 | Zellij | tmux |
|---|---|---|
| 内置浮动面板 | 开箱即用 | 需要额外配置 |
| 内置 Web 客户端 | 支持,浏览器直接访问 | 需要第三方工具 |
| 会话自动复活 | 内置 session-resurrection 插件 |
需要 tmux-resurrect 插件 |
| WASM 插件系统 | 原生支持,多语言编写 | 仅支持 Tcl 脚本 |
| 现代默认键位 | 模式化设计,新手友好 | 键位较复杂,学习曲线陡 |
| 新手友好度 | 状态栏提示可用操作,内置教程 | 无引导,需要查阅文档 |
如果你已经熟悉 tmux 且工作流稳定,没有迁移的迫切需求。但如果你刚开始接触终端复用器,或者想要更现代的体验,Zellij 是一个值得尝试的选择。
三、核心概念速览
在深入学习 Zellij 之前,需要理解几个核心概念:
- 会话(Session):Zellij 运行的顶层容器。一个会话包含若干标签页,可以分离(detach)后在后台运行,也可以随时恢复(attach)。
- 标签页(Tab):会话内的分页,类似于浏览器标签页。每个标签页有独立的面板布局。
- 面板(Pane):标签页内的终端区域,每个面板运行一个独立的 shell 进程。面板可以水平或垂直分割。
- 浮动面板(Floating Pane):悬浮在当前标签页布局之上的面板,不会影响原有面板的排列。
- 模式(Mode):Zellij 采用模式化键位系统,不同模式下相同的按键执行不同的操作。默认处于 Normal 模式,可以通过快捷键切换到 Pane、Tab、Resize 等模式。
下面的示意图展示了这些概念之间的层次关系:
┌─────────────────── Zellij 会话 (Session) ───────────────────┐
│ ┌─ 标签页 1 (Tab) ──────────┐ ┌─ 标签页 2 (Tab) ────────┐ │
│ │ ┌─面板─┐ ┌──面板──┐ │ │ ┌──────── 面板 ────────┐ │ │
│ │ │ bash │ │ vim │ │ │ │ │ │ │
│ │ └──────┘ └────────┘ │ │ └───────────────────────┘ │ │
│ └───────────────────────────┘ └───────────────────────────┘ │
│ ┌── 浮动面板 ──┐ │
│ │ htop │ │
│ └─────────────┘ │
│ [状态栏: Tab #1 | Tab #2] │
└──────────────────────────────────────────────────────────────┘
理解了这些基本概念后,接下来的文章将逐步介绍 Zellij 的安装、键位配置和具体操作方法。