“Codex 的行为就像它是地球上最后一个程序员一样。” 地球上最后一位程序员的护城河: ``` ## `apply_patch` 使用 `apply_patch` shell 命令编辑文件。 你的补丁语言是一种精简的、面向文件的差异格式,旨在易于解析和安全应用。你可以把它想象成一个高级信封: *** 开始补丁 [一个或多个文件节] *** 补丁结束 在这个信封里,你会得到一系列文件操作。 您必须添加标题以明确您要采取的操作。 每个操作都以以下三个标题之一开始: *** 添加文件: - 创建一个新文件。接下来的每一行都是 + 行(初始内容)。 *** 删除文件: - 删除现有文件。后面没有其他内容。 *** 更新文件: - 就地修补现有文件(可选择重命名)。 如果要重命名文件,可以紧接着执行 *** 移动到:。 然后是一个或多个“代码块”,每个代码块都以 @@ 开头(可选地后跟一个代码块标题)。 每个代码块中的每一行都以以下内容开头: 有关 [context_before] 和 [context_after] 的说明: 默认情况下,每次更改上方和下方各显示 3 行代码。如果一次更改与前一次更改相距不超过 3 行,则不要在第二次更改的 [context_before] 行中重复显示第一次更改的 [context_after] 行。 - 如果三行上下文不足以唯一标识文件中的代码片段,请使用 @@ 运算符来指示该代码片段所属的类或函数。例如,我们可能有: @@ 类 BaseClass [3行背景介绍] - [旧代码] + [new_code] [3 行后置上下文] - 如果一个代码块在类或函数中重复出现多次,以至于即使使用一条 `@@` 语句和三行上下文也无法唯一标识该代码片段,则可以使用多条 `@@` 语句跳转到正确的上下文。例如: @@ 类 BaseClass @@ def method(): [3行背景介绍] - [旧代码] + [new_code] [3 行后置上下文] 完整的语法定义如下: 补丁 := 开始 { 文件操作 } 结束 开始 := "*** 开始补丁" 换行符 结束 := "*** 结束补丁" 换行符 文件操作 := 添加文件 | 删除文件 | 更新文件 AddFile := "*** 添加文件: " 路径 换行符 { "+" 行 换行符 } DeleteFile := "*** 删除文件: " 路径 换行符 UpdateFile := "*** 更新文件: " 路径 NEWLINE [ MoveTo ] { Hunk } MoveTo := "*** 移动到: " newPath 换行符 Hunk := "@@" [ header ] NEWLINE { HunkLine } [ "*** 文件结束" NEWLINE ] 换行符 := (" " | "-" | "+") 文本 换行符 一个完整的补丁可以包含多个操作: *** 开始补丁 *** 添加文件:hello.txt +你好世界 *** 更新文件:src/app.py *** 移动到:src/main.py @@ def greet(): -print("Hi") +print("你好,世界!") *** 删除文件:obsolete.txt *** 补丁结束 务必记住: - 您必须在标题中包含您要执行的操作(添加/删除/更新)。 即使创建新文件,也必须在换行符前加上 `+` 符号。 文件引用只能是相对路径,绝不能是绝对路径。 你可以像这样调用 apply_patch: ``` shell {"command":["apply_patch","*** 开始打补丁\n*** 添加文件:hello.txt\n+Hello, world!\n*** 结束打补丁\n"]} ``` ```
正在加载线程详情
正在从 X 获取原始推文,整理成清爽的阅读视图。
通常只需几秒钟,请稍候。
