跳转到内容

内联编辑

内联编辑就地重写代码。你描述修改,twinny 把结果以 diff 形式流式写入编辑器,在你接受之前不会保留任何内容。它使用当前的对话提供者。

编辑选区

  1. 选中要修改的代码。没有选区时,twinny 编辑光标所在的行。
  2. Ctrl+I(macOS 为 Cmd+I),或右键选择 Twinny - Edit with instruction…
  3. 描述修改并按 Enter

建议的修改以删除行(红)和新增行(绿)的形式出现在原选区处。流式输出期间,区域上方的 Stop CodeLens 可以取消并恢复原文。

模型完成后,修改上方出现 AcceptReject 两个 CodeLens 按钮,也可用快捷键:

操作Windows / LinuxmacOS
接受编辑Ctrl+Shift+EnterCmd+Shift+Enter
拒绝编辑Ctrl+Shift+BackspaceCmd+Shift+Backspace
流式输出时停止Ctrl+Shift+/Cmd+Shift+/

涉及多处的修改会拆成多个(hunk),每块可从各自的 CodeLens 单独接受或拒绝。在编辑待定时再按 Ctrl+I 可以微调它(“更短”、“保留原名称”、“加注释”),而不必重来。

修改待定时你可以继续编辑文件其他位置:twinny 会跟踪 diff 移动到了哪里。

模型被要求做什么

提示包含选中的代码、其上下有限行数的上下文、语言和你的指令,并严格要求只返回重写后的代码。小模型并不总是遵守,所以回复会被防御性解析:去掉围栏,移除“思考”段落,缩进与原文匹配。如果模型没有返回可用内容,你会看到没有建议的修改

模型只看到选区及其周围,而不是整个文件,这让编辑快速而聚焦。需要用到其他地方知识的修改,请在指令中说明(“使用 utils 中的 formatDate 辅助函数”),或在对话中附上相关文件后用 apply

预设编辑

右键菜单中有现成的指令,通过内联编辑作用于选区:

  • Refactor 在不改变行为的前提下提升可读性和效率。
  • Add types 添加精确的类型标注。
  • Generate docs 以该语言的标准格式添加文档注释(JSDoc、docstring 等)。

Explain 不同:它把选区发送到对话并在那里回答。

用灯泡修复

在有错误或警告的行上,代码操作灯泡(Ctrl+.)提供 Fix with Twinny。它以诊断信息作为指令运行内联编辑,无需输入任何内容。只有错误和警告有此操作,提示不算,区域限制在问题周围 60 行内。任何选区在同一菜单中也会有 Edit with Twinny

编写测试

Twinny - Write tests(右键菜单或命令面板)为选中的代码(无选区时为整个文件)编写测试,写入按该语言测试运行器约定命名的同级测试文件:

语言测试文件
JavaScript、TypeScript 及大多数其他语言foo.test.ts
Pythontest_foo.py
Go、Rustfoo_test.gofoo_test.rs
Rubyfoo_spec.rb
Java、Kotlin、Scala、C#、PHPFooTest.java

twinny 尽可能从项目声明的依赖中检测测试框架(Jest、Vitest、Mocha、pytest 等)并告知模型;否则模型选择该语言的常用框架。测试文件已存在时追加新测试而不是替换。结果同样以待定编辑的形式出现,供你接受或拒绝。

从对话应用代码

对话中的每个代码块都有 apply 按钮。它把代码块作为内联编辑放入当前编辑器,让你以 diff 形式审阅,而不是直接覆盖代码:

  • 有选区时,代码块替换选区;
  • 没有选区时,twinny 查找文件中被该代码块重写的部分并在其上显示 diff;
  • 没有匹配时,代码块插入到光标处。

按 apply 前先打开要修改的文件。如果文件已包含完全相同的代码,则什么都不会发生,状态栏会说明。

提示

  • 简短的祈使句指令对小模型效果最好:“把循环提取成函数”、“处理 null 情况”、“改成 async/await”。
  • 选中完整语句。从行中间开始的选区会让模型猜测编辑从哪里开始。
  • 对文件中的重复性修改,手动做第一处,然后让代码补全从最近的编辑中学到模式。