为 Linux 构建 Zed

存储库

克隆 Zed 存储库

依赖关系

  • 安装 Rust。如果已安装,请确保它是最新版本

    rustup update
    
  • 安装必要的系统库

    script/linux
    

    如果你希望手动安装系统库,可以在 script/linux 文件中找到所需软件包的列表。

后端依赖关系

[!WARNING] 此部分仍在开发中。说明尚未完成。

如果你正在开发 Zed 的协作功能,你需要安装 zed 的 collab 服务器的依赖关系

或者,如果你已安装 Docker,则可以使用 Docker Compose 启动所有 collab 依赖关系

docker compose up -d

从源代码构建

安装依赖关系后,你可以使用 Cargo 构建 Zed。

对于编辑器的调试版本

cargo run

并运行测试

cargo test --workspace

在发布模式下,主要用户界面是 cli crate。你可以使用以下命令在开发中运行它

cargo run -p cli

安装开发版本

你可以使用以下命令在你的机器上安装本地构建:

./script/install-linux

这将以发布模式构建 zed 和 cli,并将它们放在 ~/.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 标准
  • 你需要确保安装了必要的库。你可以通过 检查系统上的已构建二进制文件 来获取当前列表。
  • 有关完整构建脚本的示例,请参阅 script/bundle-linux
  • 你可以通过使用环境变量 ZED_UPDATE_EXPLANATION 构建(或运行)Zed 来禁用 Zed 的自动更新,并为尝试手动更新 Zed 的用户提供说明。例如:ZED_UPDATE_EXPLANATION="请使用 flatpak 更新 zed。"
  • 确保将 crates/zed/RELEASE_CHANNEL 文件的内容更新为“nightly”、“preview”或“stable”,且没有换行符。这将导致 Zed 使用凭据管理器来记住用户的登录信息。

其他注意事项

在 Zed,我们的优先事项是快速行动,为我们的用户带来最新技术。我们长期以来一直对软件速度慢、过时或难以配置感到沮丧,因此我们根据这些品味构建了我们的编辑器。

然而,我们认识到许多发行版有其他优先事项。我们希望与每个人合作,将 Zed 带到他们最喜欢的平台上。但还有很长的路要走

  • Zed 是一个快速发展的早期阶段项目。我们通常每周发布 2-3 个版本来修复用户报告的问题并发布主要功能。
  • Linux 系统上可能存在其他几个 zed 二进制文件 (1, 2)。如果您希望由于这些问题而重命名我们的 CLI 二进制文件,我们建议使用 zeditzeditorzed-cli
  • Zed 会自动安装常用开发工具的正确版本,方式与 rustup/rbenv/pyenv 等相同。我们理解这是有争议的,请参阅此处
  • 我们允许用户在本地和 zed-industries/extensions 中安装扩展。这些扩展可能会根据需要安装更多工具,例如语言服务器。从长远来看,我们希望使其更安全,请参阅此处
  • Zed 默认情况下会连接到多个在线服务(AI、遥测、协作)。您的用户可以通过其 zed 设置或修补我们的 默认设置文件 来禁用 AI 和我们的遥测。
  • 由于上述问题,zed 目前无法很好地与沙箱配合使用,请参阅此处

Flatpak

[!WARNING] Zed 当前的 Flatpak 集成在启动时会退出沙箱。依赖于 Flatpak 沙箱的工作流可能无法按预期工作。

要在本地构建和安装 Flatpak 软件包,请按照以下步骤操作

  1. 按照 此处 的说明为您的发行版安装 Flatpak。
  2. 运行 script/flatpak/deps 脚本以安装所需的依赖项。
  3. 运行 script/flatpak/bundle-flatpak
  4. 现在软件包已安装,并且在 target/release/{app-id}.flatpak 中提供了软件包。

故障排除

无法编译 Zed

在报告问题之前,请确保您使用 rustup update 拥有最新版本的 rustc。

Cargo 错误声称依赖项正在使用不稳定的功能

尝试 cargo cleancargo build

Vulkan/GPU 问题

如果 Zed 在运行时因 GPU 或 vulkan 问题而崩溃,你可以尝试运行 vkcube(通常在各种发行版中作为 vulkaninfo 包的一部分提供),以尝试解决问题出在哪里。尝试通过运行 vkcube -m [x11|wayland] 在 X11 和 wayland 模式下运行。某些版本的 vkcube 使用 vkcube 在 X11 中运行,而使用 vkcube-wayland 在 wayland 中运行。

如果你有多个 GPU,你还可以尝试在不同的 GPU 上运行 Zed(例如,使用 vkdevicechooser),以找出问题出在哪里。