记录自己第一个开源PR:给Zed加上光标动画

Zed 光标动画演示

暑假闲来无事,发现 VS Code 更新了,新的 UI 真的丑啊()。遂开始寻找新的编辑器,然后发现了用 Rust 编写、采用 GPUI 的 Zed,感觉挺有意思。

下载体验之后,装上猫布丁 Blur,改了字体,美化已经万事俱备。结果找遍设置,发现——怎么能没有动画光标呢!

了解了一下 Zed 的插件机制,发现插件也无法做到。VS Code 因为是 Electron,已经有了 Custom CSS and JS Loader 这个插件,因此可以利用它直接实现光标动画,比如 vscode-neovide-cursor;Neovim 搭配 Neovide 也原生支持。

幸好 Zed 是开源的,直接 fork 下来改。因为 Zed 使用 GPUI,想实现光标动画,实际上比在 VS Code 上重新画一层 Canvas 更方便。

翻了一圈,发现 Zed 已经有 3 个相关 Issue 和 8 个 PR,但之前的 PR 全都被关闭了:有的是没有做好设置开关,有的是维护者担心性能成本。那就默认关闭动画,再在设置说明里提醒性能开销;想用的人只需要在 settings.json 里加上:

1
2
3
"cursor_animation": {
"enabled": true
}

这次应该能解决问题吧 🤔

让 Agent 分析仓库之后,很快就定位到了 Zed 的光标布局和绘制位置。参考已有的动画实现(vscode-neovide-cursor 和 Neovide 源码),加入状态管理、动画绘制和设置项,再经过不断编译、测试、修问题,最后提了 PR。十天之后,PR #63195 成功合并。

PR 提上去、准备写博客的时候,我回头看了一眼工作区,突然意识到:自己并不知道这些代码究竟是怎么起作用的。

也对,其实我根本不会 Rust 啊。

于是又让 AI 大人解释了一番。按我的理解,大概是:

1
2
3
4
5
6
7
Zed 算出光标目标位置
↓
动画模块计算这一帧的四个角
↓
GPUI 把这个多边形画出来
↓
动画没结束就请求下一帧

真是让人感慨啊。Agent 让我进入了远超自己能力水平的项目;没有 AI,我或许根本不会尝试给一个大型 Rust 项目改功能。现在 Agent 帮我“做到”了,但回头看才发现,“做到”和“理解”根本不是一回事。

以后还是会继续用 Agent,但也得对应地补基础知识了。AI 时代,行动半径和知识半径增长的速度完全不匹配。

希望大二这一年,继续保持行动半径,同时让自己的知识半径慢慢赶上来一点吧。


记录自己第一个开源PR:给Zed加上光标动画
https://tinyparis.top/2026/09/04/zed-cursor-animation-pr/
作者
Cain
发布于
2026年9月4日
许可协议