Zed Inline Assistant 实战指南:多光标、多模型并行的行内 AI 代码编辑
Zed 的 Inline Assistant(行内助手)让你在编辑器、频道笔记与终端面板中用一句提示词直接改写选中的代码——无需打开聊天面板,AI 的响应会流式替换到原始位置。本篇以 Zed 官方文档 inline-assistant.md 为主线,完整覆盖其使用方式、上下文添加、并行生成(多光标 + 多模型)等核心用法,并结合 crates/agent_ui 等源码,讲清"选中内容如何被定位、多光标如何展开为多个生成任务、备选模型如何被注册与切换"的底层机制,读完你可以直接上手配置并理解其实现细节。
使用概览:一行提示词改写选中代码
在编辑器、频道笔记(channel notes)和终端面板中,按下 Inline Assistant 的绑定键(动作 assistant::InlineAssist,macOS 与 Linux 默认 keymap 中均绑定为 ctrl-enter,见 default-macos.json 与 default-linux.json)即可唤出行内助手。
它的工作方式非常直接:把你当前的选区(如果没有选区,就是光标所在行)发送给语言模型,并用模型的响应替换该区域。这使它成为"对局部代码做定向改写"的最高效入口——重命名逻辑、补全函数体、就地重构,都不需要切换上下文。
从源码结构看,该动作定义在 crates/zed_actions/src/lib.rs 中:
#[action(namespace = assistant)]
pub struct InlineAssist {
pub prompt: Option<String>,
}
prompt 字段是可选的:不带参数按下按键会弹出提示词输入框;带参数按下则会直接以预填提示词发起生成("预填提示词"一节会详细展开)。核心运行时是一个全局实体 InlineAssistant(见 crates/agent_ui/src/inline_assistant.rs),它同时支持两类目标:
enum InlineAssistTarget {
Editor(Entity<Editor>),
Terminal(Entity<TerminalView>),
}
编辑器场景由 inline_assistant.rs(约 2100 行)驱动,终端场景则由 crates/agent_ui/src/terminal_inline_assistant.rs 中的 TerminalInlineAssistant 承担,这就是为什么同一按键在终端面板中同样有效。
上手准备:先配置至少一个 LLM 提供商
首次使用 Inline Assistant 前,需要至少配置一个 LLM 提供商,两种方式任选:
- 使用 Zed 托管模型(Zed-hosted Models):通过 Zed 账户按量计费直接访问官方提供的模型;
- 使用 API 接入(Use API Access):接入 Anthropic 等模型提供商,或 OpenRouter 等模型网关。
如果你已经为 Agent Panel 配置过 LLM 提供商(即 Agent 面板可以正常工作),那么 Inline Assistant 可以直接复用同一套配置,无需额外设置。
这里有一个文档中明确强调的边界:External Agents 运行在 agent 线程中,但不能用于 Inline Assistant 的生成。Inline Assistant 只使用 Zed 配置的 LLM 提供商,包括 Zed 托管模型、提供商 API Key、网关、本地模型以及受支持的订阅。
源码层面,首次触发时的配置校验发生在动作处理阶段:若提供商尚未完成认证(ConfigurationError::ProviderNotAuthenticated),Zed 会先弹出认证流程,认证成功后再自动继续发起 assist;其他配置错误则会弹出提示,可选择跳转到设置面板(crates/agent_ui/src/inline_assistant.rs)。
添加上下文:@-mention、图片与 @thread
Inline Assistant 添加上下文的方式与 Agent Panel 完全一致:
- 使用 @-mention 引用文件、目录、历史对话(threads)、指令文件(instruction files)和符号(symbols);
- 直接粘贴剪贴板中的图片。
此外还有一个组合技巧:你可以先在 Agent Panel 中创建一个对话线程,然后在 Inline Assistant 的提示词中用 @thread 引用它。这样就能"基于一次更长的讨论去精化某个具体改动",而无需在行内提示里重新解释全部背景。
并行生成:多光标与多模型
Inline Assistant 最重要的生产力特性之一是一次按键、并发生成多处/多份结果。
多光标:同一提示词改写所有光标位置
放置多个光标后按下 Inline Assistant 的按键,同一份提示词会发送到每个光标位置,所有位置同时开始生成。
这与 multibuffer 中的摘录(excerpts)配合尤其好用:把多个文件的相关片段汇总到一个 multibuffer 中,在每个摘录里各放一个光标,即可用一句话对所有片段做同构修改(例如统一替换 API 调用)。
从源码看,这一能力由 codegen_ranges 方法实现(crates/agent_ui/src/inline_assistant.rs),其处理逻辑值得细看:
- 取出编辑器的全部选区(
editor.selections.all()),每个光标对应一个选区; - 对每个"空选区"(光标未选中任何文本):
- 如果光标落在折叠块(fold)上,则选中整个折叠区域——并且如果折叠块后一行是闭合括号(依据语言的括号配置判断),还会把闭合括号所在行并入选区;
- 否则自动扩展为整行(从行首到行尾),这解释了"未选中任何内容时是改写整行"的行为;
- 相邻或重叠的选区会被合并为一个范围,避免同一代码块被重复处理;
- 最终每个选区转换为对应 buffer 中的
Anchor范围(codegen_ranges),逐个生成——这就是"多个位置同时生成"的落点。
生成完成后,你可以用 ctrl-[ / ctrl-](动作 agent::CyclePreviousInlineAssist / agent::CycleNextInlineAssist,同样可在 default-macos.json 与 default-linux.json 中确认)在各处生成结果之间跳转、逐个确认或回退。
多模型:一次按键,多个模型各给一版结果
Inline Assistant 还支持把同一提示词同时发给多个模型,生成多份候选结果供你挑选。通过自定义设置文件(如何编辑设置)添加 inline_alternatives 即可:
{
"agent": {
"default_model": {
"provider": "zed.dev",
"model": "claude-sonnet-4-5"
},
"inline_alternatives": [
{
"provider": "zed.dev",
"model": "gpt-5-mini"
}
]
}
}
配置多个模型后,Inline Assistant 的 UI 中会出现切换按钮,可以在各模型生成的不同输出之间循环切换(与上一节 ctrl-[ / ctrl-] 的循环机制对应)。
需要特别注意一条规则:inline_alternatives 中指定的模型是在主模型之外附加的。主模型由 agent.inline_assistant_model 决定(见 Agent Settings 文档),未单独配置行内模型时则回退到 agent.default_model。例如以下配置会让每次 assist 生成三份输出——Claude Sonnet 4.5(默认模型)、GPT-5-mini 与 Gemini 3 Flash:
{
"agent": {
"default_model": {
"provider": "zed.dev",
"model": "claude-sonnet-4-5"
},
"inline_alternatives": [
{
"provider": "zed.dev",
"model": "gpt-5-mini"
},
{
"provider": "zed.dev",
"model": "gemini-3-flash"
}
]
}
}
这两个配置项在源码中的流转链路是清晰可查的:
- 设置定义:crates/settings_content/src/agent.rs 中
AgentSettingsContent定义了inline_assistant_model: Option<LanguageModelSelection>(主模型)与inline_alternatives: Option<Vec<LanguageModelSelection>>(备选模型列表); - 设置加载:crates/agent_settings/src/agent_settings.rs 把
inline_alternatives解析为Vec<LanguageModelSelection>(缺省为空列表); - 模型注册:crates/agent_ui/src/agent_ui.rs 在初始化时读取设置,调用
LanguageModelRegistry的select_inline_alternative_models,将备选模型实例化并缓存到 crates/language_model/src/registry.rs 的inline_alternatives字段中,供每次 assist 时并行请求。
此外,行内生成的完整生命周期(请求、流式接收、替换/回退)由 crates/agent_ui/src/buffer_codegen.rs 中的 BufferCodegen / CodegenAlternative 承载——每一个模型的输出都是一个可独立确认或放弃的 CodegenAlternative,这正是"多模型候选并排比较"体验的直接实现。
Inline Assistant 与 Edit Prediction 的区别
两者都会在行内产生代码,但工作方式不同:
- Inline Assistant:你写提示词、你选择要变换的内容,上下文完全由你控制——是显式的、提示词驱动的;
- Edit Prediction:Zed 根据你的近期修改、访问过的文件和光标位置自动建议编辑,无需提示——是隐式的、上下文推断的。
一句话概括:Inline Assistant 是"我要改哪里、怎么改",Edit Prediction 是"猜你接下来想写什么"。
自定义快捷键预填提示词
高频重复的行内改写(比如"给这段代码加错误处理")可以固化为一条按键。在 keymap 中按下述格式添加绑定,即可让快捷键直接携带提示词发起 assist:
[
{
"context": "Editor && mode == full",
"bindings": {
"ctrl-shift-enter": [
"assistant::InlineAssist",
{ "prompt": "Build a snake game" }
]
}
}
]
这正对应 InlineAssist 动作的可选 prompt 参数——不带参数按键时弹出输入框,带参数按键时跳过输入直接生成,适合团队内共享一套"提示词快捷键"配置。
小结:核心文件索引
| 主题 | 文件 |
|---|---|
动作定义(assistant::InlineAssist,含可选 prompt) |
crates/zed_actions/src/lib.rs |
| 编辑器内行内助手(选区展开、多光标分组、确认/回退) | crates/agent_ui/src/inline_assistant.rs |
| 终端面板行内助手 | crates/agent_ui/src/terminal_inline_assistant.rs |
| 行内代码生成与备选结果切换 | crates/agent_ui/src/buffer_codegen.rs |
inline_alternatives / inline_assistant_model 设置定义 |
crates/settings_content/src/agent.rs |
| 备选模型注册与解析 | crates/language_model/src/registry.rs、crates/agent_ui/src/agent_ui.rs |
默认按键绑定(ctrl-enter、ctrl-[/ctrl-]) |
assets/keymaps/default-macos.json、assets/keymaps/default-linux.json |
围绕上述文档与源码,你可以从最小路径入手:先配置一个 LLM 提供商,在编辑器中选中一段代码按 ctrl-enter 完成第一次行内改写;再逐步尝试多光标批量修改、inline_alternatives 多模型对比,以及 keymap 中的预填提示词绑定,把 Inline Assistant 变成一个可定制的局部代码编辑工作流。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0629
MiniCPM5-2BMiniCPM5-2B 是一款面向端侧、本地部署和资源受限场景的 2B 稠密 Transformer,能够达到同尺寸开源模型 SOTA 水平。Markdown00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
HivisionIDPhotos⚡️HivisionIDPhotos: a lightweight and efficient AI ID photos tools. 一个轻量级的AI证件照制作算法。Python07
DragonOSDragonOS is an operating system developed from scratch using Rust, with Linux compatibility. It is designed for **Serverless** scenarios. 使用Rust从0自研内核,具有Linux兼容性的操作系统,面向云计算Serverless场景而设计。Rust00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00