← 返回博客

Zed 周报:#24

2023年10月20日


Piotr

本周我完成了一些零散的改动

  • Zed 现在可以更好地处理嵌套的 git 仓库了。 之前,我们总是遵守从工作目录根目录到文件系统根目录路径上遇到的所有 .gitignore 文件。 对于在 $HOME 目录下为其点文件设置“全局”git 仓库的用户来说,这有点麻烦。 修复方法很简单,因为我们现在会在第一个兄弟目录是 .git 的 .gitignore 文件上退出。
  • 我最喜欢的 issue 是与无法在特定键盘布局上输入某些字符有关的 issue。 这一次,事实证明无法使用美国键盘布局在 Zed 中输入“真引号”。 值得庆幸的是,这一次不是语言集成拦截了击键,而是键绑定的冲突。 事实证明,我们将 Copilot 的“建议下一个”和“建议上一个”操作的键绑定设置为了与真引号相同的键组合。 哎呀! 我们保留了键绑定,如果没有 Copilot 操作要执行,则传播击键。
  • 我和 Max 协作处理了聊天通知(虽然我更多的是听众,因为我还没有接触过那部分代码)- 在此过程中,我添加了聊天消息中提及内容的高亮显示。
  • 我为 Zed 勾勒出一个基本的 CONTRIBUTING.md,我们将来可以在此基础上进行构建。 我计划在未来几周内更多地关注我们的代码文档的质量。

Conrad

本周主要深入研究了向通话添加“访客”。访客可以关注参与者并聊天,但不能共享自己的项目、屏幕或麦克风。 我们的想法是,我们可以为代码库工作提供类似 Twitch 的行业体验,以帮助传播有关 Zed 的信息。

也就是说,我确实有时间来处理 Zed 最有趣、最长期的 bug 之一...

之前,当你按下 up 时,它会计算自当前行开始的 UTF-8 字节数,并将光标移动到上面一行中该 UTF-8 字节数之后。 那些读过关于 unicode 的人都知道,这至少可以说是一种“天真”的做法。 用户正确地抱怨它根本无法工作。

@Julia 和我探索了许多修复此问题的方法:我们可以通过计算代码点而不是字节来做得更好,或者通过计算字形簇而不是代码点来做得更好。 但不幸的是,即使是字形簇仍然存在问题

  • 在现代系统中,您的字体选择只是一种偏好。 渲染文本时,如果您的字体不包含您需要的字符(通常是 Emoji),它将使用不同的字体(通常是“Apple Color Emoji”)进行渲染。 这些访客字符将具有不同的宽度。
  • 即使在名义上的等宽字体中,单倍宽度字符(“abcd”)和双倍宽度字符(“漢字”)之间也存在区别。 我们可以使用一些 Unicode 查找表来解决这个问题(终端模拟器就是这样工作的),但由于 Unicode 规则会定期更改,并且并非所有字体作者都完全遵循这些规则,因此仍然存在需要考虑的边缘情况。
  • 如果您选择了非等宽字体,那么一切都无法保证...

因此,Julia 建议我们可以重复使用文本布局引擎的输出来解决这个问题。 我们已经有代码来确定当您单击时哪个字符对应于您的鼠标位置,因此我们重构了它,花了一些时间使其更快,修复了舍入错误等。现在(一旦合并),点击 updown 将会执行您期望的操作!

Marshall

我本周大部分时间都在清理我们的 ui crate 中的各种内容。 我们即将达到其他人将开始使用新模式构建 UI 的阶段,因此我想确保他们的东西井井有条且一致。 作为其中的一部分,我开始记录我们的各种样式助手,包括对它们对应的 Tailwind 文档的引用。

我还有机会与 Conrad 合作实现一个切换 Vim 模式的命令。 对于像我这样不是 Vim 的忠实用户,但偶尔想尝试一下的人来说,能够启用或禁用 Vim 模式而不必每次都修改 settings.json 将会很不错!

Julia

本周我花了几天时间让 Tailwind CSS 自动完成功能在更多语言中工作,例如 Svelte、PHP/Blade、Ruby/ERB 和 Elixir/HEEX。 在此过程中,我了解了很多关于这些不同生态系统的信息,同时设置测试项目并配置它们以在 VSCode 中工作,所以我有一些东西可以用来比较行为。 这有点耗时,但非常有趣且重要的是要验证一切是否按预期工作。

Kirill

我正在慢慢缩小我在面板中搜索过时诊断的范围 — 唉,该 bug 很难重现,因为它需要在特定状态下使用 LSP 服务器在特殊事件后打开特殊文件,并且这 3 个部分都不是完全清楚的。 现在,种植更多的日志,以便我们可以在下次出现时更好地捕获和理解它:我有一些理论,否则很难证明或反驳。 同时,我一直在忙于修复 bug,当我试图破坏诊断时,有些 bug 会更多地出现,所以这也是一个处理它们的好机会。

虽然这仍然更多的是一个概念,但关于远程终端共享的事情开始形成:我和 Mikayla 有一个很好的机会亲自配对,破解 alacritty 的内部代码,并为 Zed 的内部更改做好准备。 对我来说,一件值得注意的事情是,即使你的伙伴坐在你左边 10 厘米处,Zed 也很棒:有了所有的协作功能,你不再需要尝试将两个人塞进一台笔记本电脑了! 所以你可以关注 Zed 中的某个人,在另一个标签页中进行你自己的代码查找,并进行实时讨论,定期跳到特定的代码位置以提供帮助 — 这几乎就是我无论如何都会远程协作的方式,但亲自操作会更快。

Kyle

对于 Zed 的 AI 来说,这是令人兴奋的一周,因为我们在 Inline Assist 中发布了一个新的按钮“检索上下文”。 如果选择此按钮,它将为内联助手提供来自存储库的相关上下文。 这现在允许内联助手了解您的存储库,并在需要时提供来自您存储库的、基于事实依据的相关答案。 这是将利用语义索引的第二个功能,虽然只是一个非常简单的第一步,但已经非常令人印象深刻。

本周的剩余时间主要集中在通过提示模板改进提示的人体工程学,并致力于为内联助手构建一个多阶段规划代理。 随着我们越来越接近发布,我可能会对规划代理有更多要说的。 而不是向您介绍一些提示人体工程学方面的工作,下面是内联助手向您介绍我们的一些新的提示模板代码是如何工作的

内联助手介绍改进的提示人体工程学