内联编辑
wescode 的内联编辑功能让你在编辑器中直接与 AI 协作修改代码,无需在 Chat 面板和编辑器之间切换。
Inline Command (Ctrl+K)
触发方式
| 操作 | 说明 |
|---|---|
Cmd+K(macOS) | 在光标位置打开内联命令 |
Ctrl+K(Windows/Linux) | 在光标位置打开内联命令 |
选中代码 + Cmd+K | 对选中的代码执行命令 |
使用场景
无选中时(生成代码):
Cmd+K → "在这里添加一个错误处理中间件"
→ AI 在光标位置生成代码
有选中时(修改代码):
选中一段函数 → Cmd+K → "优化这段代码的性能"
→ AI 修改选中的代码
Selection Action
选中代码操作
选中代码后,可以直接请求 AI 操作:
| 场景 | 示例指令 |
|---|---|
| 重构 | "提取为独立函数" |
| 优化 | "减少内存分配" |
| 修复 | "修复这个 nil pointer" |
| 解释 | "解释这段代码" |
| 翻译 | "把注释翻译成英文" |
| 补全 | "补充错误处理" |
Diff 预览
内联 Diff
AI 的修改以 Diff 形式展示在编辑器中:
- func processData(data []byte) {
- result := parse(data)
- fmt.Println(result)
- }
+ func processData(data []byte) error {
+ result, err := parse(data)
+ if err != nil {
+ return fmt.Errorf("processData: %w", err)
+ }
+ fmt.Println(result)
+ return nil
+ }
Accept / Reject
| 操作 | 效果 |
|---|---|
| Accept(接受) | 应用修改,编辑器同步磁盘 |
| Reject(拒绝) | 撤销修改,恢复原状 |
关键行为(INV-EDIT-01):
- Accept 后 buffer === 磁盘(无 dirty 标记)
- 关闭文件永远不会弹"是否保存"对话框
- AI 编辑前先
revert(uri)同步编辑器和磁盘
Edit Engine
三级匹配
wescode 的编辑引擎使用三级匹配策略应用代码修改:
| 级别 | 策略 | 说明 |
|---|---|---|
| 精确匹配 | 逐字匹配 | 最快最准确 |
| 模糊匹配 | 容忍空白差异 | 处理格式差异 |
| 语义匹配 | AST 级别匹配 | 处理重构后的代码 |
编辑失败处理
当匹配失败时:
- 引擎尝试下一级匹配
- 使用
EditMatchFallbackhook - 报告失败并请求 AI 重试
多文件编辑
跨文件操作
AI 可以在对话中修改多个文件:
"给 UserService 添加一个 Delete 方法,并更新 Handler 和路由"
AI 修改:
1. service/user.go(添加 Delete 方法)
2. handler/user.go(添加 Delete handler)
3. router.go(注册 DELETE 路由)
4. service/user_test.go(添加测试)
文件操作工具
AI 使用以下工具操作文件:
| 工具 | 用途 |
|---|---|
read_file | 读取文件内容 |
write_file | 写入新文件 |
edit_file | 编辑现有文件 |
apply_patch | 应用 patch 格式修改 |
Ghost Write
智能补全
光标停留超过 800ms 时,AI 提供智能补全建议:
func (s *UserService) Create(ctx context.Context,
// 光标在此停留
// AI 建议补全参数和函数体
Ghost Write 特点
- 不经过 Agent Loop:直接走 FIM(Fill-in-Middle)补全
- 零工具调用:纯模型推理
- 实时响应:低延迟
- 上下文感知:基于当前文件和光标位置
格式化
AI 编辑后的格式化
wescode 不做 UI 层面的格式化——格式化是写操作的一部分:
- AI 生成的代码直接符合项目格式化规则
- Go 代码自动遵循
gofmt格式 - 不会因为格式化产生额外的 dirty 状态
项目风格匹配
AI 通过以下方式匹配项目风格:
- Convention 探测:运行时探测缩进、命名等约定
- 记忆偏好:记住用户的格式化偏好
- 上下文学习:参考周围代码的风格
批量编辑
多位置修改
AI 支持在一个命令中修改多个位置:
"把所有的 fmt.Errorf 改成 errors.New + fmt.Errorf(%w)"
→ AI 扫描全项目
→ 列出所有需要修改的位置
→ 逐一应用修改
→ 每个修改都可以 Accept/Reject
安全措施
- 每个修改独立展示
- 可以选择性接受
- 随时中断
- CKG 影响分析
注意事项
- 大范围编辑建议在 Git 工作树干净时进行
- Accept 后无法通过 Ctrl+Z 撤销(但可以通过 Git)
- 多文件编辑时注意检查每个文件的修改
- Inline Command 是单轮交互(MaxTurns=1)
- 复杂修改建议使用 Chat 面板而非 Inline Command
- Ghost Write 补全建议用 Tab 接受,Esc 拒绝