如果你用过 VS Code,可能已经习惯了它的这个设计:editor.autoClosingBrackets 和 editor.autoSurround 是两个独立的设置。你可以只开自动补全,不开自动包裹;也可以只开自动包裹,不开自动补全。两者互不影响。


Zed 之前没有这个选择。它只有一个 autoclose 开关,同时管两件事。
现在,Zed 把这两个能力拆开了。
以前的逻辑:一个开关,绑死两种行为
Zed 过去的 autoclose 开关,同时控制:
- autoclose:输入
(,自动补上)。 - auto_surround:选中一段文字,再输入
(,自动用(和)把它包起来。
对大多数括号来说,这两个功能绑在一起是合理的。但 < 是个例外。
如果你想要 auto_surround——选中一段文字,敲 < 把它包成标签——你就必须打开 autoclose。而一旦打开 autoclose,你写 a < b 的时候,它就会自动补成 a <> b。
你需要的能力,和你不需要的副作用,被锁在了同一个开关里。
现在的新特性:两个独立开关
zed做的事情是:把 auto_surround 从 autoclose 里独立出来。
现在,Zed 的用户可以像 VS Code 用户一样,按需配置:
autoclose:只负责"输入一个字符,自动补上另一半"。auto_surround:只负责"选中文本,输入一个字符,把它包起来"。
你可以关掉 autoclose,保留 auto_surround。这样 a < b 不会再变成 a <> b,但你选中一段文字再敲 < 时,它依然会帮你包好。

你也可以只开 autoclose,不开 auto_surround。这样敲 ( 会自动补 ),但选中文字后敲 ( 不会触发包裹。
它意味着 Zed 的配置粒度,终于追上了 VS Code 的水平。
对于从 VS Code 迁移过来的用户来说,这尤其重要。因为在 VS Code 里,这两个开关本来就是分开的。迁移到 Zed 之后,发现自己失去了这个选择权——这本身就是一种迁移摩擦。
现在这个摩擦没有了。你可以按照自己习惯的方式去配置,不需要接受一个"打包套餐"。