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

第32章 Zed编辑器第32章:集成Zeta、Copilot等AI代码补全方案

编辑预测(Edit Prediction)是 Zed 实现 AI 代码补全的核心机制:大语言模型会预测你希望写入的代码内容。当你输入字符时,Zed 会向编辑预测服务商请求预测,服务商随即返回单行或多行建议,你只需按下 tab 键即可采纳这些建议。

默认服务商是 Zeta,这是一款由 Zed 开发的开源模型。你也可以使用其他服务商,例如 GitHub Copilot、Mercury Coder 和 Codestral(参见其他服务商)。

关于隐私保护及训练数据的详细信息,请参阅AI 隐私反馈与训练数据章节。

配置 Zeta

若要使用 Zeta,请先登录账号。登录完成后,在输入过程中便会实时显示预测建议。

你可以通过打开设置编辑器(macOS 系统按 Cmd+,,Linux/Windows 系统按 Ctrl+,)并搜索 edit_predictions,来确认 Zeta 是否配置正确。此时 provider 字段应被设置为 Zed AI

或者,你可以直接在 settings.json 文件中验证配置:

{
  "edit_predictions": {
    "provider": "zed"
  }
}

状态栏中出现的 Z 图标也表示 Zeta 已处于激活状态。

定价方案

免费套餐每月包含 2,000 次 Zeta 预测。订阅Pro 套餐可解除此限制。详情请查阅Zed 定价页面

切换显示模式

编辑预测提供两种显示模式:

  1. eager(默认模式):只要不与语言服务器补全冲突,预测建议就会内联显示在编辑器中。
  2. subtle:只有在按住修饰键(默认为 alt)时,预测建议才会内联显示。

你可以通过 mode 键在两种模式间切换:

"edit_predictions": {
  "mode": "eager" // 或 "subtle"
},

也可以直接通过 UI 的状态栏菜单进行操作:

Edit Prediction status bar menu, with the modes toggle.

请注意,编辑预测模式兼容任意预测服务提供商。

默认按键绑定

在所有平台上,你都可以使用 alt-tab 来接受编辑预测。但在 Linux 和 Windows 上,alt-tab 通常被系统用于切换窗口,因此 alt-l 也被绑定为这些平台上编辑预测的默认快捷键。

eager 模式下,你也可以使用 tab 来接受编辑预测,除非补全菜单处于打开状态,此时 tab 将用于接受 LSP 补全。若要用 tab 插入空白字符,需先按 {#kb editor::Cancel} 取消预测,然后再按 tab

{#action editor::AcceptNextWordEditPrediction} ({#kb editor::AcceptNextWordEditPrediction}) 可用于接受当前编辑预测直至下一个单词边界。 {#action editor::AcceptNextLineEditPrediction} ({#kb editor::AcceptNextLineEditPrediction}) 可用于接受当前编辑预测直至下一行边界。

配置编辑预测按键绑定

按键绑定示例:始终使用 Tab

若希望始终使用 tab 接受编辑预测,无论 LSP 补全菜单是否打开,都可以在键位映射文件中添加以下配置:

通过 {#action zed::OpenKeymap} ({#kb zed::OpenKeymap}) 打开键位映射编辑器,搜索 AcceptEditPrediction,右键点击 tab 的绑定项并点击 edit。随后将该绑定生效的上下文修改为仅 Editor && edit_prediction,并保存。

或者,你也可以在 keymap.json 中放入以下内容:

[
  {
    "context": "Editor && edit_prediction",
    "bindings": {
      "tab": "editor::AcceptEditPrediction"
    }
  }
]

之后,{#kb editor::ComposeCompletion} 仍然可用于接受 LSP 补全。

按键绑定示例:始终使用 Alt-Tab

如果你不想再用 tab 接受编辑建议,而想统一改用 alt-tab,可以在 eager edit prediction 上下文中解绑默认的 tab 快捷键:

用 {#action zed::OpenKeymap}({#kb zed::OpenKeymap})打开按键映射编辑器,搜索 AcceptEditPrediction,右键点击 tab 对应的绑定并删除。

也可以在 keymap.json 中加入以下配置:

[
  {
    "context": "Editor && edit_prediction",
    "unbind": {
      "tab": "editor::AcceptEditPrediction"
    }
  }
]

之后,alt-tab 仍然可以用来接受编辑建议;在 Linux 和 Windows 上,alt-l 也可以,除非你手动解绑了它。

按键绑定示例:同时重绑 Tab 和 Alt-Tab

想把这两个默认的接受快捷键都换成其他按键,需要先解绑它们,再添加替换键:

用 {#action zed::OpenKeymap}({#kb zed::OpenKeymap})打开按键映射编辑器,搜索 AcceptEditPrediction,右键点击 tab 对应的绑定并删除。然后右键点击 alt-tab 的绑定,选择「Edit」,录制你想要的按键组合后保存。

也可以在 keymap.json 中加入以下配置:

[
  {
    "context": "Editor && edit_prediction",
    "unbind": {
      "alt-tab": "editor::AcceptEditPrediction",
      // Windows/Linux 上还需要加上这一行
      // "alt-l": "editor::AcceptEditPrediction",
      "tab": "editor::AcceptEditPrediction"
    },
    "bindings": {
      "ctrl-enter": "editor::AcceptEditPrediction"
    }
  }
]

在这种情况下,由于绑定带有 ctrl 修饰键,它会在 subtle 模式下或补全菜单打开时用于预览编辑建议。

清理旧版按键映射配置

如果你在 Zed v0.229.0 之前配置过编辑建议的快捷键,你的 keymap.json 中可能还残留一些现在已经多余的配置项。

旧标签页的变通方案:在引入 unbind 之前,若要阻止 tab 接受编辑预测,唯一的办法是将默认的非编辑预测类 tab 键位绑定复制到你的 keymap 中,并自定义一个 AcceptEditPrediction 绑定。如果你的 keymap 中还保留着这些复制粘贴的条目,请删除它们,并改用上述示例中所示的单个 "unbind" 条目。

上下文重命名edit_prediction_conflict 上下文已被 edit_prediction && (showing_completions || in_leading_whitespace) 取代。Zed 会自动迁移使用旧 edit_prediction_conflict 的所有绑定,因此无需你手动修改。

配置预测防抖

预测防抖控制的是你停止输入后,Zed 等待多久再自动请求编辑预测。请在所选提供商的设置中,以毫秒为单位进行配置:

{
  "edit_predictions": {
    "provider": "open_ai_compatible_api",
    "open_ai_compatible_api": {
      "prediction_debounce": 500
    }
  }
}

默认防抖时间因提供商而异:

提供商 默认值
GitHub Copilot 75 ms
Codestral 150 ms
Zed 0 ms
Mercury 0 ms
Ollama 0 ms
OpenAI-compatible API 0 ms

prediction_debounce 设为 0 可禁用额外延迟。但正常的请求限流仍可能生效。通过 {#action editor::ShowEditPrediction} 显式请求预测时,会绕过配置的防抖。

禁用自动编辑预测

你可以选择在多个层级禁用编辑预测,或彻底关闭该功能。

或者,考虑 使用 Subtle Mode

针对缓冲区

如需关闭输入时自动显示预测,请在设置文件(编辑方法)中配置以下选项:

{
  "show_edit_predictions": false
}

这将隐藏所有预测可用的提示,无论你当前处于哪种显示模式。你仍然可以通过执行 {#action editor::ShowEditPrediction} 或按下 {#kb editor::ShowEditPrediction} 手动触发编辑预测。

针对特定语言

若希望在处理特定语言时不自动显示预测,请在设置文件(编辑方法)中配置以下选项:

{
  "languages": {
    "Python": {
      "show_edit_predictions": false
    }
  }
}

针对特定目录

若要为特定目录或文件禁用编辑预测,请在设置文件(编辑方法)中配置以下选项:

{
  "edit_predictions": {
    "disabled_globs": ["~/.config/zed/settings.json"]
  }
}

完全关闭

若要完全关闭所有提供商的编辑预测功能,请显式将设置项设为 none,如下所示:

{
  "edit_predictions": {
    "provider": "none"
  }
}

配置其他提供商

编辑预测也支持其他提供商。

GitHub Copilot

若要使用 GitHub Copilot 作为提供商,请在设置文件(编辑方法)中配置以下选项:

{
  "edit_predictions": {
    "provider": "copilot"
  }
}

要登录 GitHub Copilot,请点击状态栏中的 Copilot 图标,弹窗会显示一个设备码。点击复制按钮复制该代码,然后点击「Connect to GitHub」,在浏览器中打开 GitHub 验证页面并粘贴代码。授权成功后弹窗会自动关闭。

使用 GitHub Copilot Enterprise

如果你的组织使用 GitHub Copilot Enterprise,可以在设置文件中指定企业 URI,让 Zed 连接到你的企业实例(如何编辑设置文件):

{
  "edit_predictions": {
    "copilot": {
      "enterprise_uri": "https://your.enterprise.domain"
    }
  }
}

"https://your.enterprise.domain" 替换为 GitHub Enterprise 管理员提供的 URL(例如 https://foo.ghe.com)。

设置完成后,Zed 会通过你的企业端点处理 Copilot 请求。点击状态栏中的 Copilot 图标登录时,会被重定向到你配置的企业 URL 完成认证。其余 Copilot 功能和用法保持不变。

Copilot 可以提供多个补全候选,可通过以下操作切换:

  • {#action editor::NextEditPrediction}({#kb editor::NextEditPrediction}):切换到下一个编辑预测
  • {#action editor::PreviousEditPrediction}({#kb editor::PreviousEditPrediction}):切换到上一个编辑预测

Mercury Coder

要使用 Inception Labs 的 Mercury Coder 作为提供商:

  1. 打开设置编辑器({#kb zed::OpenSettings})
  2. 搜索「Edit Predictions」,点击 Configure Providers
  3. 找到 Mercury 部分,填入从 Inception Labs 控制台获取的 API key

也可以点击状态栏中的编辑预测图标,从菜单中选择 Configure Providers

添加 API key 后,Mercury Coder 会出现在状态栏菜单的提供商下拉列表中,你可以在那里选择它,也可以直接在设置文件中配置:

{
  "edit_predictions": {
    "provider": "mercury"
  }
}

Codestral

要将 Mistral 的 Codestral 设为提供商:

  1. 打开设置编辑器(macOS 上按 Cmd+,,Linux/Windows 上按 Ctrl+,
  2. 搜索 "Edit Predictions" 并点击 Configure Providers
  3. 找到 Codestral 部分,填入来自 Codestral 控制台 的 API 密钥

或者,点击状态栏中的编辑预测图标,从菜单中选择 Configure Providers

添加 API 密钥后,Codestral 会出现在状态栏菜单的提供商下拉列表中,供你选择。你也可以直接在配置文件中设置:

{
  "edit_predictions": {
    "provider": "codestral"
  }
}

本地和自托管模型

你可以使用 Ollama 或任何实现了 OpenAI completion API 格式的服务端,来运行本地或自托管的编辑预测模型。这适用于 Ollama、vLLM、llama.cpp server、LocalAI 及其他兼容服务端。

Ollama

ollama 设为提供商并配置本地模型:

{
  "edit_predictions": {
    "provider": "ollama",
    "ollama": {
      "api_url": "http://localhost:11434",
      "model": "qwen2.5-coder:7b-base",
      "prompt_format": "infer",
      "max_output_tokens": 512
    }
  }
}

OpenAI 兼容服务端

open_ai_compatible_api 设为提供商并配置 API 端点:

{
  "edit_predictions": {
    "provider": "open_ai_compatible_api",
    "open_ai_compatible_api": {
      "api_url": "http://localhost:8080/v1/completions",
      "model": "deepseek-coder-6.7b-base",
      "prompt_format": "deepseek_coder",
      "max_output_tokens": 512
    }
  }
}

prompt_format 设置控制代码上下文在模型中的格式化方式。使用 "infer" 可让系统根据模型名称自动检测格式,也可以显式指定:

  • zeta - Zeta 1 格式
  • zeta2 - Zeta 2 格式
  • zeta2_1 - Zeta 2.1 格式
  • code_llama - CodeLlama 格式:<PRE> 前缀 <SUF> 后缀 <MID>
  • star_coder - StarCoder 格式:<fim_prefix>前缀<fim_suffix>后缀<fim_middle>
  • deepseek_coder - 带特殊 Unicode 标记的 DeepSeek 格式
  • qwen - Qwen/CodeGemma 格式:<|fim_prefix|>前缀<|fim_suffix>后缀<|fim_middle|>
  • code_gemma - CodeGemma 格式:<|fim_prefix|>前缀<|fim_suffix>后缀<|fim_middle|>
  • codestral - Codestral 格式:[SUFFIX]后缀[PREFIX]前缀
  • glm - 带代码标记的 GLM-4 格式
  • sweep - 使用 <|file_sep|> 文件块表示相关文件的 Sweep 重写窗口格式,包括 original/...current/...updated/...
  • infer - 根据模型名称自动检测(默认值)

设置为 "prompt_format": "infer" 时,Zed 会自动为名称包含 zeta2 的模型使用 Zeta 2 格式,为名称包含 zeta2.1 的模型使用 Zeta 2.1 格式。

例如,要在 Ollama 中使用 Zeta 2:

{
  "edit_predictions": {
    "provider": "ollama",
    "ollama": {
      "api_url": "http://localhost:11434",
      "model": "zeta2",
      "prompt_format": "infer",
      "max_output_tokens": 512
    }
  }
}

要在支持 OpenAI 的服务器上使用 Zeta 2.1:

{
  "edit_predictions": {
    "provider": "open_ai_compatible_api",
    "open_ai_compatible_api": {
      "api_url": "http://localhost:8080/v1/completions",
      "model": "zeta2.1",
      "prompt_format": "infer",
      "max_output_tokens": 512
    }
  }
}

如果模型名称无法匹配,也可以显式设置 "prompt_format": "zeta2""prompt_format": "zeta2_1"

你的 OpenAI 兼容服务器必须实现 OpenAI 的 /v1/completions 端点。编辑预测会按以下格式发送 POST 请求:

{
  "model": "your-model-name",
  "prompt": "formatted-code-context",
  "max_tokens": 256,
  "temperature": 0.2,
  "stop": ["<|endoftext|>", ...]
}

参见

评论 (0)