Windows 构建 Zed 编辑器踩坑记录

image.png

之前有机会在 macOS 上实机体验了一下 Zed,确实非常好用哈。省电和超快的反应速度给我留下了深刻的印象。看了一下官网,它虽然没有官方的 Windows 构建,但是可以自行编译。正好换了个硬盘有空闲空间了,就自己编译一个试试看吧。

在 Windows 上构建 Zed 编辑器的过程中遇到了一些问题,这里按照安装步骤复现的方式记录一下。其实这些问题我后来在 GitHub 的 Issues 里也看到了,不过为了下次顺畅的构建,还是汇总地记录一下。

环境部署

首先编译需要当前使用的终端支持 Rust 的指令和 CMake。Rust 好说,直接去官网下载一个 rustup 就好,它那个安装脚本可以一键把 Rust 那些个工具链一股脑装上。

然后就是 CMake,一个简单的解决方案,如果你的电脑有安装 Visual Studio,且之前用它编写过 C/C++ 的项目,那直接用 Visual Studio 的 Developer Command Prompt 就好。

建议使用 Visual Studio 的 MSVC 环境来编译,因为它提供了一个简单的图形界面来管理某些组件依赖,比如 spectre-mitigated-libs,下文将提到。

image.png

如果没有 Visual Studio,自行安装一个 CMake,相信在阅读这篇文章的你应该知道怎么做。

确保你可以在终端中使用 cargocmake 命令,然后进入下一步。

重要的更改

Zed 新版本 2024.11 开始需要依赖 Visual Studio 组件 spectre-mitigated-libs,你需要去 Visual Studio Installer 里安装这个组件(见下图)。 参考 issue: #20142

image.png

编译 Zed

首先克隆 Zed 的仓库:

git clone https://github.com/zed-industries/zed.git

进入 Zed 的目录,然后执行 cargo build

rustup target add wasm32-wasip1
cargo build --release

然后等待编译完成,这个过程可能会很久,取决于你的 CPU 性能和网络性能,网络问题请提前设置好 cargo 的代理,处理器拉跨的话我可以帮你回收。

image.png

我在我的 i5-10210U 上花了52分11秒才构建完成。

运行 Zed

你可以在当前目录使用 cargo run --release 来运行 Zed,或者直接到 target/release/。里双击运行编译成果。大部分人应该第一次就能成功,但可能有一小部分(比如我)会发现鼠标指针转了一下然后什么都没有发生。

这个时候你应该查阅一下 Zed 的日志,它会告诉你发生了什么问题。这时可能会有些聪明的小朋友会问了,我用终端运行 ./zed.exe .也没看到有输出啊?哎其实你没认真看文档,Zed 的日志文件在 ~\AppData\Local\Zed\logs\Zed.log ,而且我们现在编译的是 release 包,不会在终端有任何输出。

2024-11-28T14:45:29.283487+08:00 [INFO] ========== starting zed ==========
2024-11-28T14:45:30.4118939+08:00 [INFO] Use Yu Gothic UI as UI font.
2024-11-28T14:45:30.414073+08:00 [INFO] Opening main db
2024-11-28T14:45:30.4171121+08:00 [INFO] Opening main db
2024-11-28T14:45:30.4202397+08:00 [INFO] Using git binary path: None
2024-11-28T14:45:30.4215002+08:00 [ERROR] SHELL environment variable is not assigned so we can't source login environment variables

Caused by:
    environment variable not found
2024-11-28T14:45:30.4216455+08:00 [ERROR] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
2024-11-28T14:45:30.4927398+08:00 [ERROR] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
2024-11-28T14:45:30.4947923+08:00 [INFO] No prompt template overrides directory found at C:\Users\futab\AppData\Local\Zed\prompt_overrides. Using built-in prompts.
2024-11-28T14:45:30.4951331+08:00 [ERROR] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
2024-11-28T14:45:30.5135615+08:00 [INFO] Opening main db
2024-11-28T14:45:30.5203272+08:00 [ERROR] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
2024-11-28T14:45:30.5214826+08:00 [ERROR] 要素が見つかりません。 (0x80070490)
2024-11-28T14:45:30.5220141+08:00 [ERROR] Error { kind: Generic("Input watch path is neither a file nor a directory."), paths: [] }
2024-11-28T14:45:30.6580092+08:00 [INFO] Enabling Vulkan Portability
2024-11-28T14:45:30.6580746+08:00 [INFO] Enabling color space support
2024-11-28T14:45:30.7695251+08:00 [INFO] Adapter: "NVIDIA GeForce MX350"
2024-11-28T14:45:30.7697104+08:00 [INFO] No ray tracing extensions are supported
2024-11-28T14:45:30.8137988+08:00 [WARN] Requested size 1x1 is outside of surface capabilities
2024-11-28T14:45:30.8138856+08:00 [ERROR] No composite alpha flag for transparency: OPAQUE
2024-11-28T14:45:30.8154405+08:00 [INFO] Using surface present mode MAILBOX
2024-11-28T14:45:30.8221663+08:00 [WARN] Unable to forbid exclusive full screen

挨个搜了一下 ERROR 输出的内容,发现官方仓库的 issues 里居然有个跟我一模一样的问题的反馈 #19399,是图形渲染方面的问题(我也不懂是为什么),居然是因为我一亿年前安装的 Bandicam 的一个动态链接库导致的(挺神奇吧),想着大概最近也用不到这玩意了于是顺手就卸载掉,结果它自己就好了。

目前由于 Windows 系统使用的路径方案不同于其他类 Unix/Linux 系统,在 Windows 上构建的 Zed 在使用某些插件时会出现各种各样的问题,暂时还不太适合在 Windows 上作为生产环境编辑器使用。不过写写 Markdown 倒是不会有太大问题,我现在暂时把它当成 VSCode 的省电替代使用了,你现在正在阅读的这篇文章就是我用 Zed 码的。偶尔在没有电源只能使用电池的情况下,它极低的资源消耗不会因为处理器降频而导致卡顿。

追记:之前用 WebStorm 的时候嘎嘎转的风扇到 Zed 都不转了,这个轻量确是真的。

顺带一提,这一整套编译下来算上依赖的构建总共吃了我硬盘 11GB 的空间,如果你的硬盘空间不够,还是建议不要自己编译了。其实后来发现 GitHub 上有人写了个自动构建 Windows 版本的脚本,把构建成果放在了这个存储库的 Release 里面,懒得手动编译的的也可以下载现成的二进制文件,不过安全性我不能保证了,大伙看着用。