Zed 扩展完整指南:从安装第一个扩展到开发并发布自己的扩展
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
Zed 是由 Atom 与 Tree-sitter 团队打造的高性能代码编辑器,它的扩展系统(Zed 扩展)可以为编辑器添加语言支持、主题、图标、代码片段、调试器与 MCP 服务器等能力。本指南带你走完 Zed 扩展安装、开发、调试到发布的全流程,零基础也能跑通。
为什么需要 Zed 扩展
默认安装的 Zed 已经内置了一部分常用语言(源码位于 crates/languages/src),但除此之外的大多数语言、配色方案和工具链,都依赖扩展来提供。
你可以把它理解成 Zed 的"能力插座":
- 想让 Zed 识别一门新语言?装一个语言扩展;
- 想换一套配色或文件图标?装一个主题扩展;
- 想给 Agent 面板加自定义工具?用 MCP Server 扩展;
- 想调试某门语言?装一个调试器扩展。
而官方团队自己维护的一批扩展就放在仓库的 extensions/ 目录下,比如 HTML、GLSL、Protocol Buffers 的语言支持,以及一个用于测试的示例扩展。
30 秒认识扩展类型
在动手之前,先知道一个扩展"能干什么"。一个 Zed 扩展本质上是一个包含extension.toml清单文件的 Git 仓库,它可以提供以下一种或多种能力:
| 扩展类型 | 它帮你解决什么 | 官方文档 |
|---|---|---|
| 语言支持 | Tree-sitter 语法高亮、LSP 补全、格式化 | languages.md |
| 主题 | 自定义 UI 与语法高亮配色 | themes.md |
| 图标主题 | 文件与目录图标样式 | extensions/ |
| 代码片段 | 为语言预置常用代码模板 | extensions.md |
| 调试器 | 接入 DAP 调试协议 | extensions.md |
| MCP 服务器 | 给 Agent 面板增加自定义工具与上下文 | extensions.md |
小提示:早期版本中扩展还可以提供 Slash 命令,该能力已从 Zed 移除。现在要为 Agent 面板扩展工具,推荐使用 MCP Server 扩展。
三种安装路径,选一种就行
装扩展不复杂,按你的场景三选一即可:
| 场景 | 入口 | 适用人群 |
|---|---|---|
| 扩展商店 | 快捷键Cmd+Shift+X(macOS)或Ctrl+Shift+X(Linux/Windows),或菜单栏 Zed → Extensions | 日常用户,装现成扩展 |
| 开发中扩展 | 命令面板执行zed: Install Dev Extension,指向你的扩展目录 | 正在写扩展、想边改边测 |
| 离线文件 | 命令面板执行zed: Install Extension from File,选择.zedext文件 | 无法联网或手动分发的环境 |
商店安装
打开扩展画廊,输入扩展名,点"安装"就完事了。扩展会被解压到本地的扩展目录:
| 系统 | 扩展安装目录 |
|---|---|
| macOS | ~/Library/Application Support/Zed/extensions |
| Linux | $XDG_DATA_HOME/zed/extensions或~/.local/share/zed/extensions |
| Windows | %LOCALAPPDATA%\Zed\extensions |
该目录下有两个子目录:installed存放每个扩展的源码,work存放扩展运行中产生的文件(比如下载下来的语言服务器)。
本地开发扩展
在扩展页面点击Install Dev Extension(或触发zed::InstallDevExtension动作),选中你的扩展目录即可。装好后,扩展页面会显示"Overridden by dev extension",表示当前生效的是你的开发版本;如果之前装过同名发布版,它会先被卸载。
离线文件安装
把下载好的.zedext包交给zed: Install Extension from File,等价于手工完成了一次安装。
从零开发你的第一个 Zed 扩展 🛠
准备开发环境
你只需要两样东西:
- Rust——强烈建议通过 rustup 安装。Zed 用
wasm32-wasip2目标编译扩展,若 Rust 来自 rustup,Zed 会自动帮你装好这个 target;用 Homebrew、Nix 等其他途径装的 Rust,需要你自己保证该 target 可用。 - Git——扩展就是 Git 仓库。
另外记住一个省心事:大多数扩展一行 Rust 都不用写。只有语言服务器、上下文服务器和调试器扩展才需要自定义 Rust 代码;纯主题、图标、片段类扩展基本靠配置文件就能完成。
目录结构长这样
my-extension/ extension.toml # 必选:扩展元数据清单 Cargo.toml # 需要自定义代码时才需要 src/ lib.rs # 需要自定义代码时才需要 languages/ # 可选:语言支持 my-language/ config.toml highlights.scm themes/ # 可选:主题 my-theme.json对照官方示例,推荐直接翻 extensions/test-extension 和 extensions/html,它们的结构非常标准。
最小配置
extension.toml是唯一的必选文件,写好这几项即可:
id = "my-extension" name = "My extension" version = "0.0.1" schema_version = 1 authors = ["Your Name <you@example.com>"] description = "Example extension" repository = "https://gitcode.com/your-name/my-zed-extension"如果扩展带自定义代码,再加一个Cargo.toml,依赖固定用zed_extension_api:
[package] name = "my-extension" version = "0.0.1" edition = "2021" [lib] crate-type = ["cdylib"] [dependencies] zed_extension_api = "0.1.0"唯一的 Rust 样板代码
src/lib.rs的固定套路是:定义结构体、实现Extensiontrait、用宏注册:
use zed_extension_api as zed; struct MyExtension { // ... 扩展状态 } impl zed::Extension for MyExtension { // ... } zed::register_extension!(MyExtension);注意:扩展最终会被编译成 WebAssembly,所以部分 Rust 特性表现不同——
cfg指令不生效,std::env::var也拿不到预期结果。请改用zed_extension_api::current_platform获取运行环境,用Worktree结构体的方法读取环境变量、查找用户PATH中的二进制。
本地验证与调试
- 用
zed: Install Dev Extension把目录装进 Zed,改完配置保存即生效; - 代码里的
println!/dbg!输出会直接转发到 Zed 进程,在终端执行zed --foreground启动,就能看到 INFO 级别的详细日志; - 也可以随时打开 Zed.log 查看常规输出。
进阶:理解它背后的机制
扩展的"过程性代码"(Rust 部分)编译为 WebAssembly 运行,这就是前面说cfg与环境变量行为不同的原因。
如果你做的是带语法(grammar)的语言扩展,还需要 wasi-sdk 来编译 Tree-sitter 解析器——Zed 会自动下载它;若你本机已有 wasi-sdk,可以设置环境变量WASI_SDK_PATH指向其根目录(即包含bin/clang的那一层)。
想给语言扩展加 LSP 补全或 Tree-sitter 查询规则,细节都在 docs/src/extensions/languages.md 里,仓库里的 extensions/html 就是一个"语法 + 语言服务器"俱全的活样本。
发布你的 Zed 扩展
发布前自查
- 仓库附带受支持的许可证:Apache 2.0、BSD 3-Clause、GPLv3、MIT之一;
extension.toml元数据完整(id、name、version、authors、description 等);- 扩展功能已在本机用开发扩展方式验证通过;
- 遵守语义化版本控制(SemVer)。
提交流程
- Fork 并克隆官方扩展仓库:
git clone https://gitcode.com/GitHub_Trending/ze/zed cd zed/extensions- 把你的扩展以子模块形式加入
extensions/目录:
git submodule add https://gitcode.com/your-username/your-extension.git extensions/your-extension- 在顶层
extensions.toml中登记你的扩展,version必须与子模块对应 commit 里extension.toml的一致:
[your-extension] submodule = "extensions/your-extension" version = "0.0.1"- 提交更改并创建 Pull Request,等待合并。
评审规则(别踩雷)
- 每个 PR 只能新增或更新恰好一个扩展;
- 同一时间最多保持3 个开放 PR;
- 需在3 周内响应维护者的反馈,否则 PR 会被关闭。
完整流程与常见问题见 发布指南。
速查清单与常见问题
上手清单
- 用
Cmd+Shift+X/Ctrl+Shift+X打开扩展画廊装一个扩展 - rustup 安装 Rust,确认
wasm32-wasip2target 可用 - 建目录:
extension.toml+ 可选的languages/、themes/、src/lib.rs zed: Install Dev Extension加载本地目录,看到 "Overridden by dev extension"zed --foreground观察println!输出排查问题- 确认许可证与元数据,走子模块 +
extensions.toml+ PR 发布
遇到问题先查这里
| 现象 | 先做什么 |
|---|---|
| 扩展加载失败 | 用zed --foreground启动看 INFO 日志,核对zed_extension_api版本与 Zed 版本的兼容性 |
| 语法扩展编译报错 | 检查 wasi-sdk 是否就绪,必要时设置WASI_SDK_PATH指向已有安装 |
| 行为异常、拿不到环境变量 | 别用std::env::var,改用Worktree与current_platform |
| 性能卡 | 控制扩展体积,避免在主流程做耗时操作 |
继续深入
- 扩展总览:docs/src/extensions.md
- 安装详情:docs/src/extensions/installing-extensions.md
- 开发详情:docs/src/extensions/developing-extensions.md
- 发布入口:docs/src/extensions/publishing/publishing-guide.md
- 官方扩展示例:extensions/
装好一个扩展是 5 分钟的事,写出并发布一个自己的扩展也不过是一个下午。挑一门你常用的语言或一套心仪的配色,从extension.toml写起吧。
【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考