入门 Zed Industries 2026-09-14 17:42:20 · 0 阅读

第145章 在 Linux 上构建 Zed 编辑器

代码仓库

克隆 Zed 代码仓库

依赖项

  • 安装 rustup

  • 安装必要的系统库:

sh script/linux

如果想手动安装系统库,可在 script/linux 文件中找到所需软件包的清单。

从源码构建

安装完依赖项后,即可使用 Cargo 构建 Zed。

构建编辑器调试版本:

cargo run

运行测试:

cargo test --workspace

在 release 模式下,主要的用户界面是 cli 包。开发模式下可这样运行:

cargo run -p cli

安装开发版

可通过以下命令在本地机器上安装构建版本:

./script/install-linux

该命令以 release 模式构建 zedcli,将二进制文件安装到 ~/.local/bin/zed,并把 .desktop 文件安装到 ~/.local/share

Wayland & X11

Zed 同时支持 X11 和 Wayland。默认情况下,会在运行时自动选择能找到的窗口系统。若当前处于 Wayland 环境,想以 X11 模式运行,可设置环境变量 WAYLAND_DISPLAY=''

Zed 打包须知

本章节面向负责打包 Zed 的发行版维护者。

技术要求

Zed 有两个主要二进制文件:

  • 需要构建 crates/cli,并将其二进制文件以 zed 为名放入 $PATH 中。
  • 需要构建 crates/zed,并将其放置于 $PATH/to/cli/../../libexec/zed-editor。例如,若将 cli 放在 ~/.local/bin/zed,则 zed 应放在 ~/.local/libexec/zed-editor。由于部分 Linux 发行版(尤其是 Arch)不推荐使用 libexec,也可将该二进制文件放在 $PATH/to/cli/../../lib/zed/zed-editor(例如 ~/.local/lib/zed/zed-editor)。
  • 如果你要提供 .desktop 文件,可以在 crates/zed/resources/zed.desktop.in 中找到一个模板,并使用 envsubst 来填充所需的值。还应将此文件重命名为 $APP_ID.desktop,以便该文件符合 FreeDesktop 标准。此外,还应将此 desktop 文件设置为可执行(chmod 755)。
  • 你需要确保已安装必要的库。你可以通过在你的系统上检查已构建的二进制文件来获取当前列表。
  • 完整的构建脚本示例请参见 script/bundle-linux
  • 你可以禁用 Zed 的自动更新,并为那些试图手动更新 Zed 的用户提供说明。你只需在构建(或运行)Zed 时设置环境变量 ZED_UPDATE_EXPLANATION 即可。示例:ZED_UPDATE_EXPLANATION="Please use flatpak to update zed."
  • 请记得将 crates/zed/RELEASE_CHANNEL 文件的内容更新为 'nightly'、'preview' 或 'stable',且不要包含换行符。这将促使 Zed 使用凭据管理器来记住用户的登录信息。

其他注意事项

Zed 迭代速度很快,而各发行版维护者往往面临不同的限制和优先级。以下内容阐述了当前的权衡:

  • Zed 是一个高速发展的项目。我们通常每周发布 2-3 个版本,以解决已报告的问题并交付较大的变更。
  • Linux 系统上可能存在其他几个名为 zed 的二进制文件(12)。如果你希望因这些问题而重命名我们的 CLI 二进制文件,我们建议使用 zeditzeditorzed-cli
  • Zed 会自动安装常见开发工具的版本,类似于 rustup/rbenv/pyenv。这种行为在这里进行了讨论。
  • 用户可以在本地安装扩展,也可以从 zed-industries/extensions 安装。扩展可能会安装额外的工具(如语言服务器)。计划中的安全性改进可查看 这里
  • Zed 默认会连接多个在线服务(AI、遥测、协作)。用户可以通过 zed 设置禁用 AI 和遥测,也可以修改我们的默认设置文件
  • 由于上述原因,Zed 目前在沙箱环境中运行不佳,详见此讨论

Flatpak

Zed 目前的 Flatpak 集成会在启动时退出沙箱,依赖 Flatpak 沙箱机制的工作流可能无法按预期运行。

本地构建并安装 Flatpak 包的步骤如下:

  1. 按照这里的说明为你的发行版安装 Flatpak。
  2. 运行 script/flatpak/deps 脚本安装所需依赖。
  3. 运行 script/flatpak/bundle-flatpak
  4. 安装完成后,打包好的文件位于 target/release/{app-id}.flatpak

内存分析

heaptrack 非常适合诊断内存泄漏。安装方式:

$ sudo apt install heaptrack heaptrack-gui
$ cargo install cargo-heaptrack

然后构建并运行附加了性能分析器的 Zed:

$ cargo heaptrack -b zed

退出该 Zed 实例后,终端输出中会包含一条运行 heaptrack_interpret 的命令,用于将 *.raw.zst 分析数据转换为 *.zst 文件,再用 heaptrack_gui 打开查看。

Perf 记录

如何从运行中的 Zed 实例获取符号已解析的火焰图。当 Zed 占用大量 CPU 时使用此方法,对程序卡死无帮助。

问题发生时

  • 查找 PID(进程 ID): ps -eo size,pid,comm | grep zed | sort | head -n 1 | cut -d ' ' -f 2 或者使用 htop/btop/top 等工具,找到 zed-editor 中内存占用最高的那个进程的 PID。

  • 安装 perf: 在 Ubuntu(及其衍生版)上执行 sudo apt install linux-tools

  • 录制 Perf 数据: 运行 sudo perf record -g --call-graph dwarf -p <刚才找到的pid>,等待几秒钟采集数据,然后按 Ctrl+C。此时应已生成 perf.data 文件。 --call-graph dwarf 选项会记录每个采样函数的调用者,并通过保留在剥离后的 Release 二进制文件中的 .eh_frame 数据进行栈回溯;如果没有帧指针,普通的 -g 选项无法正常工作。

  • 将输出文件所有权改为当前用户: 执行 sudo chown $USER:$USER perf.data

  • 获取构建信息: 重新运行 Zed,在命令面板中输入 {#action zed::About} 以获取确切的 commit 哈希值。

可将 perf.data 文件连同确切的 commit 哈希值一起发送给 Zed。

后续步骤

以下步骤可由 Zed 团队成员执行。

发布的 Linux 二进制文件已剥离符号,但每个版本未剥离的二进制文件都归档在 Sentry 中(由 script/bundle-linux 上传)。 请从 Sentry 项目的 Debug Files 页面下载(通过版本号或二进制文件的 build id 搜索),然后继续执行下面的 perf buildid-cache 步骤。 由于剥离操作保留了 build id,因此下载的未剥离二进制文件与用户的 perf.data 是匹配的。

或者,重新构建带有符号的二进制文件:

  • 检出之前找到的 commit 并修改 Cargo.toml。 应用以下差异更改,然后执行 Release 构建。
[profile.release]
-debug = "limited"
+debug = "full"
  • 将符号添加到 perf 数据库: perf buildid-cache -v -a <release zed 二进制文件路径>

  • 从数据库解析符号: perf inject -i perf.data -o perf_with_symbols.data

  • 安装 flamegraph: cargo install cargo-flamegraph

  • 渲染火焰图: flamegraph --perfdata perf_with_symbols.data

故障排除

Cargo 报错声称依赖项使用了不稳定特性

尝试运行 cargo cleancargo build

评论 (0)