首页
/ Zed Inline Assistant 实战指南:多光标、多模型并行的行内 AI 代码编辑

Zed Inline Assistant 实战指南:多光标、多模型并行的行内 AI 代码编辑

2026-09-06 14:51:35作者:瞿蔚英Wynne

Zed 的 Inline Assistant(行内助手)让你在编辑器、频道笔记与终端面板中用一句提示词直接改写选中的代码——无需打开聊天面板,AI 的响应会流式替换到原始位置。本篇以 Zed 官方文档 inline-assistant.md 为主线,完整覆盖其使用方式、上下文添加、并行生成(多光标 + 多模型)等核心用法,并结合 crates/agent_ui 等源码,讲清"选中内容如何被定位、多光标如何展开为多个生成任务、备选模型如何被注册与切换"的底层机制,读完你可以直接上手配置并理解其实现细节。

使用概览:一行提示词改写选中代码

在编辑器、频道笔记(channel notes)和终端面板中,按下 Inline Assistant 的绑定键(动作 assistant::InlineAssist,macOS 与 Linux 默认 keymap 中均绑定为 ctrl-enter,见 default-macos.jsondefault-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 提供商,两种方式任选:

  1. 使用 Zed 托管模型Zed-hosted Models):通过 Zed 账户按量计费直接访问官方提供的模型;
  2. 使用 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),其处理逻辑值得细看:

  1. 取出编辑器的全部选区editor.selections.all()),每个光标对应一个选区;
  2. 对每个"空选区"(光标未选中任何文本):
    • 如果光标落在折叠块(fold)上,则选中整个折叠区域——并且如果折叠块后一行是闭合括号(依据语言的括号配置判断),还会把闭合括号所在行并入选区;
    • 否则自动扩展为整行(从行首到行尾),这解释了"未选中任何内容时是改写整行"的行为;
  3. 相邻或重叠的选区会被合并为一个范围,避免同一代码块被重复处理;
  4. 最终每个选区转换为对应 buffer 中的 Anchor 范围(codegen_ranges),逐个生成——这就是"多个位置同时生成"的落点。

生成完成后,你可以用 ctrl-[ / ctrl-](动作 agent::CyclePreviousInlineAssist / agent::CycleNextInlineAssist,同样可在 default-macos.jsondefault-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"
      }
    ]
  }
}

这两个配置项在源码中的流转链路是清晰可查的:

  1. 设置定义crates/settings_content/src/agent.rsAgentSettingsContent 定义了 inline_assistant_model: Option<LanguageModelSelection>(主模型)与 inline_alternatives: Option<Vec<LanguageModelSelection>>(备选模型列表);
  2. 设置加载crates/agent_settings/src/agent_settings.rsinline_alternatives 解析为 Vec<LanguageModelSelection>(缺省为空列表);
  3. 模型注册crates/agent_ui/src/agent_ui.rs 在初始化时读取设置,调用 LanguageModelRegistryselect_inline_alternative_models,将备选模型实例化并缓存到 crates/language_model/src/registry.rsinline_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.rscrates/agent_ui/src/agent_ui.rs
默认按键绑定(ctrl-enterctrl-[/ctrl-] assets/keymaps/default-macos.jsonassets/keymaps/default-linux.json

围绕上述文档与源码,你可以从最小路径入手:先配置一个 LLM 提供商,在编辑器中选中一段代码按 ctrl-enter 完成第一次行内改写;再逐步尝试多光标批量修改、inline_alternatives 多模型对比,以及 keymap 中的预填提示词绑定,把 Inline Assistant 变成一个可定制的局部代码编辑工作流。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.74 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.81 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
531
595
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
920
1.84 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.63 K
1.02 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.36 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.02 K
518
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
389