第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 定价页面。
切换显示模式
编辑预测提供两种显示模式:
eager(默认模式):只要不与语言服务器补全冲突,预测建议就会内联显示在编辑器中。subtle:只有在按住修饰键(默认为alt)时,预测建议才会内联显示。
你可以通过 mode 键在两种模式间切换:
"edit_predictions": {
"mode": "eager" // 或 "subtle"
},
也可以直接通过 UI 的状态栏菜单进行操作:

请注意,编辑预测模式兼容任意预测服务提供商。
默认按键绑定
在所有平台上,你都可以使用 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 作为提供商:
- 打开设置编辑器({#kb zed::OpenSettings})
- 搜索「Edit Predictions」,点击 Configure Providers
- 找到 Mercury 部分,填入从 Inception Labs 控制台获取的 API key
也可以点击状态栏中的编辑预测图标,从菜单中选择 Configure Providers。
添加 API key 后,Mercury Coder 会出现在状态栏菜单的提供商下拉列表中,你可以在那里选择它,也可以直接在设置文件中配置:
{
"edit_predictions": {
"provider": "mercury"
}
}
Codestral
要将 Mistral 的 Codestral 设为提供商:
- 打开设置编辑器(macOS 上按
Cmd+,,Linux/Windows 上按Ctrl+,) - 搜索 "Edit Predictions" 并点击 Configure Providers
- 找到 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|>", ...]
}
参见
- Agent Panel:支持文件读写和终端访问的智能体编辑
- Inline Assistant:基于提示词对选中代码进行转换