Tabby 使用指南:面向现代时代的跨平台终端、SSH 与串口客户端全解析
Tabby(前身 Terminus)是 Windows、macOS 与 Linux 平台上一款功能高度可配置的终端模拟器,同时内置 SSH/串口客户端、完整快捷键体系、窗口分割与标签恢复能力。本文以官方韩文 README 为骨架,逐章覆盖其终端能力、SSH 客户端、串口终端、便携式(Portable)模式、插件与主题生态,并结合当前仓库的源码实现(配置默认值、串口服务、X11/跳板通道等)逐条佐证,帮助你建立从功能认知到源码定位的完整技术图景。
一、Tabby 是什么
Tabby 的定位是 Windows 标准终端(conhost)、PowerShell ISE、PuTTY 或 iTerm 的替代方案:它把本地终端、SSH 客户端、串口终端统一在一个应用里,并围绕"可配置"做深度设计——主题、配色、快捷键、多按键组合、窗口分割、会话恢复全部可以定制。
同时,README 明确划出了它的边界:Tabby 不是新的 shell,也不是 MinGW/Cygwin 的替代品,它并不轻量。如果内存占用是硬约束,可以考虑 Conemu 或 Alacritty 这类更轻的方案。从源码结构看,Tabby 是一个 Electron 应用:app/package.json 定义主进程构建,app/lib/app.ts 是 Electron 主进程入口,而终端、SSH、串口等能力以独立的 tabby-* 包(插件式子项目)组织在仓库根目录下。
二、终端功能
官方列出的终端能力包括:
- VT220 终端 + 各类扩展
- 多层嵌套的分屏窗口
- 位于任意一侧的标签栏
- 带全局唤起快捷键的可停靠窗口("Quake console" 风格)
- 进度条检测
- 进程完成时通知
- 括号粘贴(bracketed paste)与多行粘贴警告
- 字体连字(ligatures)
- 自定义 shell 配置(custom shell profiles)
- 右键粘贴/选择复制(PuTTY 风格)
这些特性都能在源码中找到对应的配置面。tabby-terminal/src/config.ts 中 TerminalConfigProvider.defaults 定义了终端行为的默认值,例如:
terminal:
frontend: xterm-webgl # 渲染前端
fontSize: 14
bell: off # 响铃方式
bracketedPaste: true # 括号粘贴
ligatures: false # 字体连字
cursor: block
cursorBlink: true
rightClick: menu # 右键行为;Windows 平台默认改为 clipboard
warnOnMultilinePaste: true # 多行粘贴警告
detectProgress: true # 进度检测
scrollbackLines: 25000 # 回滚行数
值得注意的是平台差异:同一配置文件中 platformDefaults 按 macOS/Windows/Linux 分别覆写字体与快捷键——macOS 默认 Menlo 字体且 copy 为 ⌘-C;Windows 默认 Consolas、rightClick: clipboard、copyOnSelect: true、复制为 Ctrl-Shift-C;Linux 默认 Liberation Mono、pasteOnMiddleClick: false(注释说明中键粘贴由操作系统处理)。这解释了为什么"右键粘贴"在 Windows 上是默认行为而在其他平台上不是。
渲染与标签管理位于 tabby-terminal/src/api/baseTerminalTab.component.ts,它基于 xterm 前端(普通 + WebGL 两种,见 tabby-terminal/src/frontends/xtermFrontend.ts 的引用)实现标签动画、工具栏与搜索面板;"分屏嵌套"则由 tabby-core/src/components/splitTab.component.ts 及配套的 splitTabDropZone/splitTabSpanner 等组件提供拖拽、分割、聚焦切换的 UI 基础。"可停靠窗口(Quake console)"的抽象在 tabby-core/src/services/docking.service.ts 中定义(dock() 与多屏枚举接口),Electron 端实现在 tabby-electron/src/services/docking.service.ts,配合全局快捷键实现随处唤起。
三、SSH 客户端
官方 README 列出的 SSH 能力:
- 带连接管理器的 SSH2 客户端
- X11 转发与端口转发
- 自动跳板机(jump host)管理
- 密钥代理转发(含 Pageant 与 Windows 自带 OpenSSH agent)
- 登录脚本
配置面在 tabby-ssh/src/config.ts:
ssh:
warnOnClose: false # 关闭会话时是否警告
winSCPPath: null # WinSCP 路径(Windows 上传/下载集成)
agentType: auto # agent 转发类型(auto/pageant/openssh 等)
agentPath: null
x11Display: null # X11 转发目标显示,缺省回退到 $DISPLAY
knownHosts: []
verifyHostKeys: true # 默认校验主机密钥
会话层基于 russh 实现。从 tabby-ssh/src/session/ssh.ts 的源码结构看:jumpChannel 字段承载跳板机通道(transport = await russh.SshTransport.newSshChannel(this.jumpChannel.take())),即连接链路上任一节点可以是 jump host;X11 转发通过 x11ChannelOpen$ 事件订阅后把转发流接回本地 displaySpec(this.config.store.ssh.x11Display || process.env.DISPLAY ?? 'localhost:0'),与默认值 x11Display: null 的回退行为一致。shell 通道在 tabby-ssh/src/session/shell.ts 中按 profile.options.x11 决定是否开启 X11 请求。连接管理(保存的连接、登录脚本、端口转发)的 UI 位于 tabby-ssh/src/components/ 下的连接编辑器与设置组件。此外仓库还提供 tabby-ssh/src/sshImporters.ts,用于从已有工具导入 SSH 配置。
四、串口(Serial)终端
官方特性清单:
- 连接保存(保存串口配置为 profile)
- Readline 输入支持
- 可选的按十六进制字节输入与 hexdump 输出
- 换行转换
- 自动重连
串口能力由独立的 tabby-serial 子包实现。其核心服务 tabby-serial/src/services/serial.service.ts 展示了两个值得注意的实现细节:
- 双绑定(binding)策略:
detectBinding()在 Web 平台返回 WebSerialAPI 绑定(WSABinding),桌面平台则用@serialport/bindings-cpp的autoDetect()。也就是说桌面端依赖 native 串口驱动,Web 端依赖浏览器 Web Serial API。 - 快捷连接语法:
quickConnect(query)支持COM3@115200这种"端口@波特率"的查询形式(默认 115200),生成一个type: 'serial'的 profile 后立即开新标签页。
默认快捷键在 tabby-serial/src/config.ts 中定义:serial: ['Alt-K'] 全局唤起串口连接对话框。端口枚举失败时 listPorts() 会记录错误并返回空数组而不是抛出,保证 UI 不崩溃。串口设置表单(波特率、数据位、换行转换、hex 输入/输出等)位于 tabby-serial/src/components/serialProfileSettings.component.ts。
五、便携式(Portable)模式
README 的说明非常简短:在 Tabby.exe 所在目录创建 data 文件夹,Tabby 就会以便携应用的方式运行(配置与数据全部写入该目录而非系统用户数据目录)。
这段行为在主进程启动早期实现,代码量虽小但逻辑清晰,见 app/lib/portable.ts:
const appPath = path.dirname(electron.app.getPath('exe'))
const portableData = path.join(appPath, 'data')
if (fs.existsSync(portableData)) {
console.log('reset user data to ' + portableData)
electron.app.setPath('userData', portableData)
}
即:检查 exe 旁是否存在 data 目录,存在则把 Electron 的 userData 路径整体重定向过去。由此可推论:便携模式下配置文件、插件、SSH 连接、vault 全部落在 Tabby.exe 同级/data 内,移动整个目录即可迁移全部状态;该目录不存在时行为与正常安装版完全一致。
六、插件
插件与主题可以直接在 Tabby 的设置界面内安装(插件管理器服务位于 tabby-plugin-manager/src/services/pluginManager.service.ts,插件在 app/src/plugins.ts 中被加载,黑名单逻辑见 app/src/pluginBlacklist.ts)。
README 中列出的常用社区插件及其用途(以文档列出的描述为准):
- clickable-links — 让终端中的路径与 URL 可点击
- docker — 连接到 Docker 容器
- title-control — 通过前缀/后缀/字符串替换修改终端标签标题
- quick-cmds — 向一个或所有终端标签发送快捷命令
- save-output — 把终端输出记录到文件
- sync-config — 将配置同步到 Gist 或 Gitee
- clippy — 官方示例插件("总来烦你"的那种)
- workspace-manager — 基于给定配置生成自定义工作区 profile
- search-in-browser — 用系统默认浏览器打开 Tabby 中选中的文本搜索
- sftp-tab — 类似 SecureCRT,为 SSH 连接打开 SFTP 标签
- web-auth-handler — 应用内 Web 认证弹窗(主要为 warpgate 浏览器认证)
- mcp-server — 面向 Cursor、Windsurf 等 MCP 客户端的 Model Context Protocol 服务器集成
从仓库结构看,插件机制与子项目组织方式一致:tabby-ssh、tabby-serial、tabby-linkifier 等本身就遵循"npm 包 + webpack.config.mjs + tsconfig.typings.json"的插件包模板,社区插件可复用同一套 API(tabby-core/src/api/ 下的 hostApp、profileProvider、toolbarButtonProvider 等接口)。
七、主题
README 列出的社区主题:
- hype — 受 Hyper 启发的主题
- relaxed — "给 Tabby 一些松弛感"的主题
- gruvbox
- windows10
- altair
主题能力在仓库中同样有清晰落地:内置社区配色方案库位于 tabby-community-color-schemes/schemes/(数百个配色文件,如 Solarized Dark、Dracula、Nord、Gruvbox Dark、TokyoNight 等),由 tabby-community-color-schemes/src/colorSchemes.ts 聚合导出;主题的抽象接口在 tabby-core/src/api/theme.ts,主题应用服务在 tabby-core/src/services/themes.service.ts。终端配色与主题的衔接则由 terminal.colorScheme/lightColorScheme/customColorSchemes 配置项(见 tabby-terminal/src/config.ts)驱动,暗/亮两套方案随系统外观切换。
八、从源码到文档:推荐阅读路径
如果你希望把本文的功能描述与源码对应起来,建议按以下顺序深入:
- README.md 与本文对应的 README.ko-KR.md — 官方功能清单(本文各章节的原始出处)
- HACKING.md — 项目组织方式与非常简单的插件开发教程
- tabby-core/src/config.ts 与各子包
config.ts— 所有配置项默认值的单一事实来源 - tabby-terminal/src/session.ts、tabby-ssh/src/session/、tabby-serial/src/session.ts — 三类会话的运行时实现
- app/lib/app.ts、app/lib/pluginManager.ts — Electron 主进程与插件装载
以上路径均以仓库根目录为起点,可直接在当前仓库中按相对路径定位,作为功能验证与二次开发的入口。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0622
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00

