Zed编辑器:构建无缝协作的编程办公环境

本文深入介绍Zed编辑器的协作功能设计,包括基于CRDT的实时协作架构、虚拟办公室通道系统、项目空间管理,以及团队如何利用这些工具进行高效远程协作开发,展示了现代编程工具如何重新定义团队协作模式。

Zed是我们的办公室

Joseph Lyons
2025年11月13日

本页内容

  • 协作融入Zed的DNA
  • Zed协作工具快速入门
  • 我们的虚拟办公室
  • 公司范围的讨论空间
  • 项目特定空间
  • 个人专注空间
  • 我们的发展方向

周一中午12点ET,整个Zed Industries团队都聚集在我们每周的全员会议中。

一些队友记录他们的日程偏差,而其他人则详细说明他们本周打算关注的内容。Nathan刚刚结束了重要公告,Morgan正在分享我们的指标趋势并涵盖运营更新。同时我正在准备上周的用户引用来分享,其他人在讨论部分添加主题。

在整个会议期间,屏幕被共享,各种声音在对话中进进出出,随着数十个光标实时同时编辑同一个文件,我们的笔记迅速增长。

这整个会议都在Zed内部进行。

我们从一开始的使命就是设计一个编辑器,它将是:

  • 响应式:击键和重新渲染之间的延迟应该是难以察觉的。
  • 专注:界面应该提供最小的干扰,不妨碍代码。
  • 协作:与队友合作应该感觉就像坐在他们旁边的办公室里一样。

抛开前两个属性,让我们专注于协作。

协作融入Zed的DNA

多年来,我们一直梦想构建终极的协作编辑器。这个愿景的根源可以追溯到Nathan在Pivotal Labs的早期,当时将两个键盘插入同一台计算机进行结对编程是标准做法。我们开始重新创建那种无缝的协作体验——但是为分布式团队。

但是等等…这项技术在其他编辑器中不是已经存在了吗?

是的!如果你做开发人员足够长时间,你可能还记得Atom的teletype包——两者都是由Zed的创始人构建的。Teletype使开发人员能够共享其工作空间的"门户",这是朝着Zed协作愿景迈出的第一步。尽管尝试使Atom(一个Electron应用程序)更具响应性,但它从未达到团队渴望的性能标准。Nathan离开了Atom团队,最终开始研究gpui,Zed的GPU加速UI渲染框架,用Rust编写,后来Atom被GitHub停止使用。不再有Atom,不再有Teletype。

其他编辑器添加了它们的协作版本,但现状仍然不足。设置足够繁琐以至于很麻烦;你经常必须安装扩展,并在每次想要共享时将链接粘贴到终端或编辑器中。并发编辑不能干净地合并,随着更多协作者加入,性能迅速下降,最糟糕的是,你经常不得不在Slack或Zoom上共享屏幕。

我们从零开始设计Zed以具有协作性——它不是附加服务或事后想法。利用CRDT作为我们的核心数据结构,我们确保无冲突和最终一致的属性,每个人的更改无缝合并并收敛到相同状态。你不必担心执行光标操作以避免协作服务中的致命缺陷。我们的架构提供低延迟,无论同事在同一个办公室还是在海洋对面,无论你是结对编程还是群体编程,性能都保持敏捷。设置毫不费力:无需安装扩展,无需复制粘贴每个会话的链接;只需要你的GitHub句柄。通过内置音频和自动切换到屏幕共享,当需要沟通编辑器外部的工作时,无需回退到外部工具。

我们主要为自己构建了Zed的协作服务,这样我们就可以在Zed中有效地一起构建Zed。这对我们来说不仅仅是一个功能——它对我们如何工作至关重要。我们在使用Zed的协作服务时既受益又找到极大的乐趣,我们认为你也会!

Zed协作工具快速入门

协作概述

1: 通过单击状态栏中的人员图标打开协作面板,在你通过GitHub身份验证流程登录后即可访问。 2: 此区域容纳称为"频道"的虚拟房间,这些房间以分层结构组织。 3: 通过单击+按钮创建顶级频道。通过右键单击现有频道并选择新建子频道选项来创建嵌套子频道。 4: GitHub头像显示谁在哪个频道中。单击频道的名称加入它。 5: 单击文档图标访问其"频道笔记",它充当与频道关联的元数据。 6: 进入频道后,通过麦克风图标静音/取消静音你的声音。 7: 允许其他人查看你的屏幕。 8: 频道与项目无关。项目通过标题栏中的共享按钮自愿通过它们共享。频道可以是公共的(🛜)或限制为特定成员(#️⃣),并包括具有访客、成员和管理员角色的权限系统。 9: 单击标题栏中的头像以关注队友。如果你正在关注正在共享屏幕的人,Zed将根据他们是专注于Zed还是其他应用程序,自动在你的Zed实例中在关注他们的光标和他们的屏幕共享之间切换。

请参阅我们关于协作的数据和隐私常见问题解答。

我们的虚拟办公室

我们的办公室是Zed的协作面板。

随着我们公司的发展,我们的频道树已经经历了许多迭代,但我们今天拥有的是一个足够灵活的结构,可以适应多种形式的协作。我们的频道树用于:

  • 公司范围的讨论
  • 处理项目
  • 个人专注时间

公司范围的讨论空间

虽然任何频道在技术上都可以分类并用作"会议"空间,但我们有一些指定用于"全员"会议。这些频道用于签到、知识传播和反思。项目通常不通过这些会议共享;工作直接在频道笔记中发生。

一些例子:

每周一,我们跳入本周频道讨论我们本周的计划,审查指标,并讨论我们需要采取行动的任何紧迫事项。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 2025年11月10日,星期一

## 日程偏差

...

## 关注领域

- Max:编辑预测
- Katie:Git,学生计划,RBAC,博客
- David:Git(多缓冲区性能)
- Lukas:Windows / 多缓冲区
- Ben:ACP + Meetup
- Cole:并排差异,git PR
- Ben K:zeta2
- Julia:Windows错误
- Anthony:git工作😀
- Smit:社区板,问题回复,PR分类
- Finn:社区板,扩展组织CI
- Bennet:AI质量,设置评估
- Conrad:扩展商店测试;将自动更新移动到云端
- Antonio:Meetup + DeltaDB
- Mikayla:多代理
- Kirill:彩虹括号;PR
- Lena:GitHub问题可见性,社区板
- Oleksiy:zeta2
- Dino:社区板,问题回复,在可运行项和性能上配对
- Joseph:社区,在zed中构建zed博客
- Mary:PM招聘,BE

## 商业角

...

回顾频道每6周使用一次。在这次会议中,鼓励每位员工在诸如什么进展顺利?和什么本可以更好?等类别下添加要点,并投票决定我们将在这个时间段讨论哪些项目以从中学习。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 2025年9月19日,星期五

### 什么进展顺利

- ⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 我们持续发布
- ⭐⭐⭐⭐⭐⭐⭐⭐⭐ ACP发布收到惊人的积极反响
- ⭐⭐⭐⭐⭐⭐⭐⭐ DeltaDB获得严重关注
- ⭐⭐⭐⭐⭐⭐⭐ 喜欢Windows的进展并对发布感到兴奋
- ⭐⭐⭐⭐⭐ 对Cloud的投资真的感觉在这次计费工作中得到了回报
- ⭐⭐⭐⭐ 编辑预测进展
- ⭐⭐⭐ 我们的依赖项更好的稳定性(尤其是tree-sitter,不再有段错误,万岁)
- ⭐⭐ 新团队成员表现良好
- ⭐⭐ 通过PR的强烈参与(并且许多已合并)
- ⭐ 让Codex ACP集成启动比Claude Code更顺利,感谢codex-rs是开源的(1000%)

...

### 什么本可以更好

- ⭐⭐⭐⭐⭐⭐⭐⭐⭐ 我们有多个回归,@Kirill在nightly中发现但进入了stable
  - 自动更新
  - 丢弃未命名缓冲区
    => 行动项:ping @first-responders
- ⭐⭐⭐⭐⭐⭐⭐⭐⭐ 自动更新中断(我知道一个子集已经对此进行了回顾)
  - 我们现在对此有一个测试
    - 我认为我们需要经历一次才能意识到我们需要在这里添加测试
- ⭐⭐⭐⭐⭐ PR积压再次增长 :/
- ⭐⭐ 希望有一台我可以购买的好Windows笔记本电脑

会议不必是拖累。演示频道每周五使用,被团队认为是"重磅"。员工跳入,自愿展示他们工作的酷功能或错误修复,并从团队其他成员获得实时反馈。

除了特定公司范围会议的频道外,我们还有一些通用会议室,用于不适合其他地方且不需要专用空间的一次性会议。

对于一家构建文本编辑器的公司,以过去传奇的打字机命名这些会议空间感觉很合适。

项目特定空间

我们围绕特定项目构建频道和团队,这是我们大部分协作发生的地方。项目通常将较大计划所需的多个功能分组,例如git 1.0、编辑预测v2、delta db和cloud。在这些频道中,项目成员充当主机,共享他们的Zed代码库实例供团队协作。频道笔记通常包括项目成员列表、目标、我们在此次努力中旨在解决的GitHub问题/讨论/项目板的链接,以及项目的总体进展。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
## Git 1.0

团队:Cole, Anthony, Cameron, Jakub, David
相关:

- Git 1.0板:https://github.com/orgs/zed-industries/projects/48/views/1

## 完成🎉(庆祝然后移到底部)

...

# 关键:

- [D] - 需要设计
- [*] - 进行中
- [x] - 完成
- [-] - 暂停

## 阶段1(差异):

- [*] [@jakub @david] 使项目差异持续敏捷,消除海滩球
  - [*] [@david] 使多缓冲区'加载'增量
  - [*] [@david] `DisplayMap`快照在许多文件多缓冲区上添加基准测试

...

## 阶段2(合并冲突):

- [D] 使我们的合并冲突不感觉像工程师UI
  - 🎨 冲突区域高亮

  - 每个冲突区域两侧更有帮助的标签
- 添加三向冲突解决UI

...

## 阶段3(面板/位置/遍历):

- [D] 提交日志
  - https://github.com/zed-industries/zed/discussions/26511
- [D] 文件历史UI

  - Joseph:本地文件历史可以由DeltaDB支持
  - 使过去提交差异更具交互性(editor::OpenExcerpts,文件历史集成)


...

子频道通常用于组织项目各个组件的会议空间。

并非所有基于项目的频道都专注于我们添加到Zed的功能;许多存在以支持非开发工作,如营销、社区和指标。我们的许多项目频道是公开的,你可以加入我们的频道树,阅读笔记,并了解我们如何构建Zed,就像@FalbertengoDev一样。

个人专注空间

在我们的树中,我们有一个人员频道。鼓励员工在这里添加一个以自己命名的子频道。这些是我们的个人工作空间——我们的"虚拟小隔间"。当队友在个人频道中时,它倾向于发出信号:“我需要一些专注时间来完成这项任务,但如果你需要什么,欢迎随时来访。“团队中的每个人以略有不同的方式使用这些。我经常使用我的频道来组织我想处理的博客文章内容。

有趣的事实:这篇博客文章最初在我的博客子频道中概述。

敏锐的观察者可能会注意到在上面的屏幕截图中这些频道旁边没有头像。这些频道无人占用并不罕见,因为团队通常更喜欢在可能的时候协作!

我们的虚拟办公室与任何其他现场办公室没有太大不同——我们有指定的会议空间、处理项目空间和个人专注时间空间。我们构建了我们的频道树以支持使我们能够运营公司的工作流程,但你可以以最适合团队需求的方式构建你的频道树。

我们的发展方向

虽然Zed中的协作使我们能够从Zed内部运行Zed Industries,但它仅仅触及了我们设想团队合作方式的表面。我们正在构建一个未来,其中协作是持续的对话,而不是离散的提交——每个讨论、编辑和见解都随着代码的演变而保持链接,对队友和AI代理都可访问。

到达这里并不是一条直线。多年来,我们暂停了协作工作以专注于用户经常请求的功能——代理驱动的工具、调试、Windows支持和git支持——但我们对Zed的主要目标没有改变。随着我们在基本功能上与其他编辑器达到同等水平,这些绕道变得越来越少,使我们能够重新专注于我们最兴奋的事情:构建最伟大的多人软件开发工具。

目前的协作被认为是alpha版,目前对所有用户免费使用!浏览源代码。寻找更好的编辑器?你今天可以在macOS、Windows或Linux上尝试Zed。立即下载!我们正在招聘!如果你对我们博客涵盖的主题充满热情,请考虑加入我们的团队,帮助我们发布软件开发的未来。

Zed Industries © 2025
注册 · 已有帐户?登录
最终用户条款 · 归属
产品
下载
发布
扩展
路线图
文档
GitHub↗
状态↗
资源
常见问题解答
CLA
支持
社区链接
讨论↗
订阅
公司
博客
关于
价值观
团队
工作
品牌
社交
Twitter↗
Bluesky↗
YouTube↗
Discord↗
Reddit↗

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计