AI 编辑功能

wescode 提供了多种 AI 辅助编辑模式,从轻量的自动补全到完整的多文件重构,覆盖日常编码的各种场景。


四种交互模式

模式触发方式适用场景工具集
Ghost Write光标停留 >800ms代码补全、续写无(FIM 补全)
Selection Action选中文字后右键单次操作(解释、优化)无
Inline CommandCtrl+K就地修改选中代码Block 操作
Sidebar ChatCtrl+L完整对话式编码全部工具

Ghost Write 自动补全

工作原理

Ghost Write 是 wescode 的实时代码补全功能。当你在编辑器中输入代码并短暂停顿(>800ms)时,AI 会预测你接下来要写的代码,并以灰色幽灵文本显示。

使用方式

  1. 正常编写代码
  2. 光标停留片刻,等待灰色建议出现
  3. 按 Tab 接受整行补全
  4. 按 Esc 忽略建议
  5. 继续输入会自动更新建议

补全能力

Ghost Write 不仅仅是简单的文本续写,它结合了:

性能说明


Inline Command(Ctrl+K)

基本用法

  1. 在编辑器中选中你想要修改的代码(也可以不选中,AI 会自动判断范围)
  2. 按 Ctrl+K(macOS: Cmd+K)
  3. 在弹出的输入框中输入你的指令
  4. AI 会就地修改代码

常用指令示例

指令效果
添加错误处理为函数添加 error return 和检查
添加注释为代码添加中文注释
重构为更简洁的写法简化代码逻辑
添加参数验证在函数入口添加参数校验
转换为 async/await将回调风格改为 async 风格
提取为独立函数将选中代码提取为新函数
添加单元测试为函数生成测试代码

Inline Command 的特点


编辑预览与 Diff

Diff 视图

当 AI 修改代码时,wescode 会在编辑器中显示 Inline Diff 视图:

  func processOrder(order *Order) error {
+     if order == nil {
+         return fmt.Errorf("order cannot be nil")
+     }
+     if order.Amount <= 0 {
+         return fmt.Errorf("invalid order amount: %d", order.Amount)
+     }
      // 处理订单逻辑...
      return nil
  }

预览行为

AI 编辑完成后,编辑器会自动:

  1. 显示 Diff decoration(颜色标记)
  2. 同步磁盘内容到编辑器 Buffer(textFileService.revert)
  3. 确保编辑器 Buffer 与磁盘一致(无 dirty 状态)

重要:AI 编辑后你不会看到「未保存」的小圆点标记,因为 wescode 会自动将磁盘内容同步到编辑器。关闭文件时不会弹出「是否保存」对话框。


Accept / Reject 工作流

接受修改

操作效果
点击「Accept」按钮接受当前文件的所有 AI 修改
按 Ctrl+Enter同上
点击「Accept All」接受所有文件的所有修改(多文件场景)

接受后:

拒绝修改

操作效果
点击「Reject」按钮回滚当前文件的 AI 修改
按 Escape同上
点击「Reject All」回滚所有文件的修改

拒绝后:

部分接受

如果 AI 修改了多处,你可以逐块接受或拒绝:

  1. 在 Diff 视图中浏览每个修改块
  2. 使用块旁边的「✓」接受或「✗」拒绝单个块
  3. 处理完所有块后,最终确认

批量编辑

多文件编辑

在 Chat 面板中,AI 可以同时修改多个文件:

帮我在所有 handler 中添加请求日志中间件

AI 会:

  1. 搜索所有相关文件
  2. 逐个文件进行修改
  3. 在 Chat 面板中显示每个文件的修改摘要
  4. 你可以逐个文件 Accept/Reject

apply_patch 工具

对于大范围的代码修改,AI 会使用 apply_patch 工具,它可以精确地应用多个文件的补丁:

编辑引擎的三级匹配

wescode 的编辑引擎使用三级匹配策略确保编辑准确应用:

  1. 精确匹配 — 完全匹配目标代码片段
  2. 模糊匹配 — 允许空白和缩进差异
  3. Fallback 匹配 — 使用 EditMatchFallback hook 进行启发式匹配

如果匹配失败,AI 会收到明确的错误信息并尝试修正。


格式化与一致性

自动格式化

wescode 不会在 AI 编辑后自动运行格式化工具。格式化是写操作的一部分,由 Go 后端在编辑前处理(pre-write),而不是 UI 后处理。

代码风格

AI 在生成和编辑代码时会:


常见场景

场景一:快速修 Bug

1. 在编辑器中打开有 Bug 的文件
2. 选中相关代码
3. Ctrl+K → "修复这里的 nil pointer 错误"
4. 查看 Diff → Accept

场景二:添加新功能

1. Ctrl+L 打开 Chat
2. 描述新功能需求
3. AI 创建/修改多个文件
4. 逐个文件查看 Diff
5. Accept All 或逐个处理

场景三:重构代码

1. 选中要重构的函数
2. Ctrl+K → "将这个函数拆分为更小的辅助函数"
3. 查看 Diff,确认逻辑正确
4. Accept

注意事项

  1. AI 编辑是不可见的:AI 的编辑在完成时自动保存,不会产生 dirty 状态
  2. Buffer Overlay:AI 读取的是编辑器内存中的最新内容,即使未保存到磁盘
  3. 撤销支持:Ctrl+Z 可以撤销 AI 的修改
  4. 同一时间一个 Run:同一工作区同时只能运行一个 AI 编辑任务

相关文档