← 返回博客

Zed 周刊:第 17 期

2023 年 8 月 22 日

新的一周,新的博客文章。我们决定将博客系列更名为“Zed 周刊”,以便更好地反映文章内容。

本周,我们主要致力于编辑器的 AI 部分、频道、改进语言服务器支持和性能。

Antonio

本周非常激动人心,因为我们开始实现一项新的内联助手功能,它允许您生成代码或转换您的选择。我们离这个功能的第一个版本非常接近,最早下周就可以发布到预览版。

一个有趣的技术挑战是如何将 GPT 逐个 token 地流式传输给我们的文本,并逐步将其应用于选择。在典型的 diff 中,您会比较整个字符串并生成一个“最短编辑脚本”。在这里,diff 的右侧是逐步生成的,因此我们不得不推出我们自己的 diff 算法版本,它能够随着 GPT 文本的到来逐步生成 hunk。

凯尔

又一周几乎完全专注于我们的语义索引。首先,我们本周发布了我们的搜索 UI 的内部版本,这让团队有机会亲自测试我们的语义引擎。在引擎方面,我们实现了一个 Eager/Lazy 操作队列,允许我们将快速任务卸载到后台,简化我们的索引过程,并提高吞吐量。下周,我们希望通过嵌入缓存和 tokenization 优化来扩展此功能。最终,我们对性能寄予厚望,这在 AI 领域可能尤其具有挑战性。我很高兴 Piotr 和我本周取得的进展,我们还有一些优先级较高的优化工作,这将推动我们达到我们很高兴发布的地步。

除此之外,我花了一些时间与 Antonio 合作开发我们的内联助手功能。我仍然对我们过去 5 年在 AI 领域取得的进展印象深刻,这是一个在这个领域工作的激动人心的时刻。

康拉德

Vim 模拟的工作进展顺利。本周的主要变化是支持您设置文件中的 "relative_line_numbers": true。为了使其有意义,我们还必须修复一个长期存在的错误,即 jk 和相关操作在屏幕坐标而不是文件坐标中工作。我们已经开始的下一个主要功能可能是我最喜欢的:. 重播上次操作。模拟它是一个有趣的 Vim 工作原理的学习体验:有很多细节需要注意,但它会很值得!敬请期待更多...

Piotr

本周我继续与 Kyle 合作开发语义搜索。我们在这方面取得了相当大的进展;除此之外,我还增强了我们的语言配置,允许指定自定义单词字符。这是我们 PHP 和 Tailwind 等语言所需要的功能,因为 - 在 PHP 的情况下 - 我们没有将开头的“$”视为变量名的一部分,从而导致我们丢弃 LSP 服务器的建议。最后但同样重要的是,我终于完成了几周前与 Julia 一起启动的项目搜索更改;结果现在已排序(和以前一样)并立即弹出。端到端延迟仍然相同,但我有一些想法如何解决这个问题。敬请期待!

内森

持续关注样式和布局的新方法。到目前为止,Taffy 运行良好。希望在下面的演示中进行迭代,以开始构建更复杂的组件和界面。您可以使用基于 Tailwind CSS 类的辅助方法或直接设置属性进行样式设置。

This layout is produced by the code below
此布局由以下代码生成
.

fn example<V: 'static>() -> impl Element<V> {
    use div::div;
    let palette = RosePinePalette::dawn();
 
    div()
        .text_color(black())
        .h_full()
        .w_full()
        .fill(palette.rose)
        .child(
            div()
                .fill(palette.pine)
                .child(div().fill(palette.love).w_6().h_3()),
        )
        .child(
            div()
                .fill(palette.gold)
                .child(div().fill(palette.iris).w_3().h_3()),
        )
}

茱莉亚 (Julia)

我们 Tailwind 支持的最后一项任务是确保自动补全功能在 kebab-case 类名方面表现如预期。为了知道自动补全应该从哪里开始,Zed 会在光标周围查找以识别单词边界。以前,这是一个硬编码的机制,对所有语言都相同,Kirill 意识到当我们认为连字符是边界但符号是 kebab-case 时,这会导致问题。这会导致我们在用户键入的每个破折号后错误地截断自动补全查询,因此“bg-yellow”会变成“yellow”,导致不正确的自动补全排序和过滤。

Piotr 在我们的 PHP 支持中发现了美元符号的相同问题,因此他添加了一个新系统,用于针对每种语言配置此机制。这在完美的时间帮助我们解决了 Tailwind 的问题,一切都很好,至少直到我们遇到 JSX。

JSX 的问题在于我们需要能够完成 kebab-case Tailwind 类名,但外部语言语法需要继续将连字符作为单词边界。幸运的是,在今年年初,Max 和我建立了一种机制,可以针对每种语法范围覆盖这种类型的问题。这种机制允许我们在正常的 JS/TS 中拥有正常的单词边界,但在键入类名时,我们可以将其识别为 JSX 元素中的属性,并允许破折号成为单词的一部分,从而使自动补全正常工作!

米凯拉

上周,我们为频道构建了一个新功能:频道备注!现在每个频道都有一个与之关联的 Markdown 文档,您可以使用它来帮助管理您使用频道所做的一切。对我们来说,我们发现它们有助于组织我们的项目并跟踪人们正在做什么。从头开始构建新的协作机制令人兴奋 :D

约瑟夫

本周我大部分时间都在我们的分析仪表板中,纠正同时出现的各种问题。众所周知,比较包含数字字符的字符串效果不佳,但在我们的版本从 0.99.0 变为 0.100.0 (😂) 之前,它一直运行正常,所以我完全忽略了它;所有按版本分组或排序的图表都完全崩溃了。更新此任务理论上很简单,但实际上有点痛苦——不过我快到终点了!

除了仪表板之外,我一直在考虑 Zed Industries 如何提高我们计划发布的核心语言的支持质量。我想到团队成员成为他们在日常编码中广泛使用的语言的“语言倡导者”可能会很好。这些倡导者将负责标记问题并推动团队解决它们或自己解决它们。我还认为邀请社区成员来涵盖团队中没有人擅长的语言可能会很有用。我不确定这个想法是否会实现,因为团队的预定任务非常繁忙,但理论上,这是有道理的。虽然我打算继续以相同的重视程度对待所有问题和社区反馈,但我计划倡导 Python——我有一些关于我可以打开的 PR 的想法,希望能改善开发体验。

内特

我们一直在探索频道的更多功能,包括频道备注和聊天。本周我一直在为这些功能进行设计,并进行了一些设计更新,使频道更容易扫描和使用。

Exploring a more distinct Current Call section in channels.
探索频道中更独特的“当前通话”部分。

除此之外,我一直在探索一些更长远的设计和主题理念,我将在接下来的几周中讨论!

马克斯

本周,Mikayla 和我继续致力于 Zed 即将推出的频道功能。我们内部已经使用了一周,我们发现我们的团队倾向于为每个项目创建一个频道的模式。

本周,我们增加了一个我们称之为“频道笔记”的功能,每个频道都有一个存储在服务器上的 Markdown 缓冲区,可以像共享项目中的文件一样协作编辑。我们周四完成了这项功能的初步实现,我们计划开始使用这些频道笔记来跟踪我们项目的进展。

基里尔

我与 Julia 和 Piotr 合作完成了一些 Tailwind 支持的工作,与这项任务交叉进行。我们已经很好地协调了这些更改,因此我只需要在其他人的工作基础上添加几行代码,就可以在 CSS 和 HTML 中实现良好的 Tailwind 自动补全。JSX 的自动补全仍然不够好,所以那里还有更多工作要做。

除此之外,我完全沉浸在内嵌提示中:我成功实现了提示解析逻辑、动态提示(现在您可以悬停并单击它们了!)并在其基础上进行了一些优化,以便在可能的情况下查询更少的提示。我花了很多时间才找出与悬停相关的错误,我认为目前的结果看起来不错,但现在只有长时间的使用才能说明问题。这项任务中最有意义的部分之一是再次为 rust-analyzer 做出贡献,希望能够进一步改善更多开发人员的工作流程。通过对内嵌提示解析的更好客户端视角,我们似乎可以显著缩小 rust-analyzer 的基本 inlayHint 响应,有时可以减少超过 50% 的先前大小。


正在寻找更好的编辑器吗?

您今天就可以在 macOS、Windows 或 Linux 上试用 Zed。立即下载


我们正在招聘!

如果您对我们博客中涵盖的主题充满热情,请考虑加入我们的团队,帮助我们实现软件开发的未来。