入门 Zed Industries 2026-09-14 17:42:19 · 0 阅读

第5章 在 Zed 中编辑代码

Zed 提供了多种工具,帮助你更高效地编写和修改代码。本节将介绍与你使用的 language server 协同工作的核心编辑功能。

本节内容

功能协同方式

在编辑代码时,Zed 会结合来自多个来源的信息:

  1. Language server 根据项目的类型和结构提供补全、诊断和快速修复
  2. 编辑预测 在你输入时建议多字符或多行变更
  3. 多缓冲区 允许你在一次操作中跨文件应用更改

例如,你可以:

  • 使用 language server 的重构功能重命名函数
  • 在多缓冲区中查看结果,其中会显示所有受影响的文件
  • 利用多光标在所有位置进行额外的编辑
  • 如果代码出现错误,立即获得诊断反馈

相关功能

  • AI 功能 — 智能体式编辑、内联代码转换以及 AI 代码补全
  • 配置语言 — 为你的项目设置 language server
  • 按键绑定 — 自定义编辑命令的键盘快捷键

代码补全 - Zed

Zed 支持两种补全来源:

  1. 由语言服务器(LSP)提供的“代码补全”。这些服务器由 Zed 自动安装或通过 Zed 语言扩展 集成。
  2. 由 Zed 自研的 Zeta 模型或外部提供商(如 GitHub Copilot)提供的“编辑预测”。

语言服务器代码补全

当有合适的语言服务器可用时,Zed 会提供当前文件中变量名、函数及其他符号的补全建议。你可以将以下内容添加到 Zed 的 settings.json 文件中来禁用此功能:

"show_completions_on_input": false

你可以通过按下 ctrl-space 或在命令面板中触发 editor::ShowCompletions 操作来手动触发补全。

注意:在 Zed 中使用 ctrl-space 需要禁用 macOS 的全局快捷键。请打开 系统设置 > 键盘 > 键盘快捷键 > 输入源,然后取消勾选 选择上一个输入源

更多信息,请参见:

编辑预测

Zed 内置支持通过 Zeta 一次性预测多处编辑,Zeta 是 Zed 的开源且基于开放数据训练的模型。 随着你的输入,编辑预测会自动出现,大多数情况下,你可以按 tab 键接受它们。

有关如何设置和配置 Zed 编辑预测的更多信息,请参阅编辑预测文档

代码片段 - Zed

使用 {#action snippets::ConfigureSnippets} 操作可以新建或编辑指定作用域的代码片段文件。

代码片段存放在 ~/.config/zed/snippets 目录下,你可以通过 {#action snippets::OpenFolder} 操作直接打开该目录。

配置示例

{
  // 每个片段必须有 name 和 body,prefix 和 description 可选。
  // prefix 用于触发片段,省略时则使用 name。
  // 使用 $1、$2 或 ${1:defaultValue} 这样的占位符来定义 Tab 停靠点。
  // $0 决定光标的最终位置。
  // 值相同的占位符会相互联动。
  // 如果片段中在占位符之外使用了 $ 符号,必须用两个斜杠转义(如 \\$var)。
  "Log to console": {
    "prefix": "log",
    "body": ["console.info(\"Hello, ${1:World}!\")", "$0"],
    "description": "Logs to console"
  }
}

作用域

作用域由语言名的小写形式决定,例如 Python 对应 python.json,Shell Script 对应 shell script.json,但也有以下例外:

作用域 文件名
Global snippets.json
JSX javascript.json
Plain Text plaintext.json

JSX 的代码片段需要写在 javascript.json 而不是 jsx.json 中;TSX 和 TypeScript 则遵循上述通用规则。

文件名中会移除路径分隔符(/\),因此名为 PL/X 的语言对应 plx.json

已知限制

  • 传入多个 prefix 时,只有第一个会生效。
  • 目前仅支持 json 格式的片段文件。

诊断 - Zed 中的错误与警告

Zed 的诊断信息来自语言服务器,同时支持 LSP 的 push 和 pull 两种模式,因此兼容所有现有的语言服务器。

常规诊断

默认情况下,Zed 会在编辑器和滚动条中以带下划线的文本形式显示所有诊断信息。

编辑器诊断信息可通过

"diagnostics_max_severity": null

编辑器设置进行过滤(可选值:"off""error""warning""info""hint" 以及 null(默认,显示所有诊断))。

滚动条上的诊断显示由

"scrollbar": {
  "diagnostics": "all",
}

配置项控制(可选值:"none""error""warning""information" 以及 "all"(默认))。

将鼠标悬停在诊断信息上,可显示包含完整渲染诊断消息的提示框。 此外,可以使用 editor::GoToDiagnosticeditor::GoToPreviousDiagnostic 在编辑器中的诊断之间导航,并针对当前选中的诊断显示弹出框。

内联诊断(错误透镜)

Zed 支持以透镜形式在代码右侧显示诊断信息。 此功能默认禁用,但可以通过编辑器菜单临时开启(或关闭),或者通过

"diagnostics": {
  "inline": {
    "enabled": true,
    "max_severity": null, // 与编辑器设置中的 `diagnostics_max_severity` 取值相同
  }
}

进行永久配置。

其他 UI 位置

项目面板

项目面板可以根据文件中的诊断严重程度对条目进行着色。

请通过以下方式进行配置:

"project_panel": {
  "show_diagnostics": "all",
}

配置项(可选值:"off""errors" 以及 "all"(默认))。

编辑器标签页

类似项目面板,编辑器标签页也可以通过

"tabs": {
  "show_diagnostics": "off",
}

配置项进行着色(可选值:"off"(默认)、"errors" 以及 "all")。

多缓冲区 - 在 Zed 中同时编辑多个文件

Zed 的一项强大能力是允许你同时编辑多个文件。结合多光标功能,可以显著提升大规模重构的效率。

在多缓冲区中编辑

编辑多缓冲区与普通文件无异。所做的更改会同步到编辑器中该文件的其他打开副本,你可以使用 {#action workspace::Save}(在 macOS 上绑定 cmd-s,在 Windows/Linux 上绑定 ctrl-s,在 Vim 模式下为 :w)保存所有文件。

在多缓冲区中,使用多光标同时编辑所有文件通常非常有用。若要编辑几个特定实例,可以用鼠标选择它们(macOS 上是 option-click,Windows/Linux 上是 alt-click),也可以用键盘操作。在 macOS 上按 cmd-d,在 Windows/Linux 上按 ctrl-d,或在 Vim 模式下输入 gl,即可选中光标下单词的下一个匹配项。

若要编辑所有匹配项,可以执行 {#action editor::SelectAllMatches} 命令来选择它们(macOS 上是 cmd-shift-l,Windows/Linux 上是 ctrl-shift-l,Vim 模式下是 g a)。

导航至源文件

虽然可以在多缓冲区中轻松编辑文件,但直接跳转到源文件往往更有益处。你可以点击摘录之间的任何分隔线,或者将光标放在摘录中并执行 {#action editor::OpenExcerpts} 命令来实现这一点。需要注意的是,如果正在使用多光标,该命令将打开源文件,并定位到多缓冲区中每个光标下的位置。

另外,如果你习惯用鼠标,想通过双击某个摘录来打开它,可以在设置中启用该功能:"double_click_in_multibuffer": "open"

项目搜索

运行 {#action pane::DeploySearch} 命令即可开始搜索(macOS 上是 cmd-shift-f,Windows/Linux 上是 ctrl-shift-f,Vim 模式下是 g/)。搜索完成后,结果会显示在一个新的 multibuffer 中,整个项目里每一行匹配结果都会对应一个摘录。

诊断

如果安装了 language server,诊断面板可以显示整个项目中的所有错误。点击状态栏中的图标,或运行 {#action diagnostics::Deploy} 命令(macOS 上是 cmd-shift-m,Windows/Linux 上是 ctrl-shift-m,Vim 模式下是 :clist)即可打开。

查找引用

如果安装了 language server,可以通过 {#action editor::FindAllReferences} 命令查找光标所在符号的所有引用(macOS 上是 cmd-click,Windows/Linux 上是 ctrl-click,Vim 模式下是 g A)。

取决于所用的 language server,{#action editor::GoToDefinition} 和 {#action editor::GoToTypeDefinition} 等命令在存在多个可能的定义时,也会打开一个 multibuffer。

评论 (0)