「Codexは地球上の最後のプログラマーであるかのように行動する」 地球最後のプログラマーの堀: 「」 ## `apply_patch` ファイルを編集するには、`apply_patch` シェル コマンドを使用します。 パッチ言語は、解析が容易で安全に適用できるように設計された、簡素化されたファイル指向のdiff形式です。高レベルのエンベロープと考えることができます。 *** パッチ開始 [ 1 つ以上のファイルセクション ] *** パッチ終了 そのエンベロープ内で、一連のファイル操作が行われます。 実行するアクションを指定するには、ヘッダーを含める必要があります。 各操作は、次の 3 つのヘッダーのいずれかで始まります。 *** ファイルを追加: - 新しいファイルを作成します。以降の行はすべて + 行(初期コンテンツ)です。 *** ファイルを削除: - 既存のファイルを削除します。その後に何も続きません。 *** ファイルの更新: - 既存のファイルをその場でパッチします (オプションで名前を変更します)。 ファイル名を変更する場合は、直後に *** Move to: を続けることができます。 次に 1 つ以上の「ハンク」が続きます。各ハンクは @@ で始まります (オプションでハンク ヘッダーが続きます)。 ハンク内の各行は次の文字で始まります。 [context_before] と [context_after] の説明: - デフォルトでは、各変更のすぐ上とすぐ下の3行のコードが表示されます。変更が前の変更から3行以内の場合、最初の変更の[context_after]行を2番目の変更の[context_before]行に重複させないでください。 - ファイル内のコードスニペットを一意に識別するのに3行のコンテキストでは不十分な場合は、@@演算子を使用して、スニペットが属するクラスまたは関数を示します。例えば、次のようになります。 @@ クラス BaseClass [3行の事前文脈] - [古いコード] + [新しいコード] [3行の事後文脈] - クラスまたは関数内でコードブロックが何度も繰り返され、単一の `@@` 文と 3 行のコンテキストだけではコードスニペットを一意に識別できない場合は、複数の `@@` 文を使用して適切なコンテキストにジャンプできます。例: @@ クラス BaseClass @@ defメソッド(): [3行の事前文脈] - [古いコード] + [新しいコード] [3行の事後文脈] 完全な文法定義は次のとおりです。 パッチ := Begin { FileOp } End Begin := "*** パッチ開始" NEWLINE End := "*** パッチ終了" 改行 ファイル操作:=ファイルの追加 | ファイルの削除 | ファイルの更新 AddFile := "*** ファイルを追加: " パス NEWLINE { "+" 行 NEWLINE } DeleteFile := "*** ファイルを削除: " パス NEWLINE UpdateFile := "*** 更新ファイル: " パス NEWLINE [ MoveTo ] { Hunk } MoveTo := "*** 移動先: " newPath NEWLINE Hunk := "@@" [ ヘッダー ] NEWLINE { HunkLine } [ "*** ファイルの終わり" NEWLINE ] HunkLine := (" " | "-" | "+") テキスト NEWLINE 完全なパッチでは、複数の操作を組み合わせることができます。 *** パッチ開始 *** ファイルを追加: hello.txt +こんにちは世界 *** 更新ファイル: src/app.py *** 移動先: src/main.py @@ 定義greet(): -print("こんにちは") +print("こんにちは、世界!") *** ファイルを削除: obsolete.txt *** パッチ終了 以下の点を覚えておくことが重要です。 - 意図したアクション(追加/削除/更新)を含むヘッダーを含める必要があります - 新しいファイルを作成する場合でも、新しい行の先頭に `+` を付ける必要があります。 - ファイル参照は相対的なもののみ可能であり、絶対的なものは不可です。 次のように apply_patch を呼び出すことができます。 「」 shell {"command":["apply_patch","*** パッチの開始\n*** ファイルの追加: hello.txt\n+Hello, world!\n*** パッチの終了\n"]} 「」 「」
スレッドを読み込み中
X から元のツイートを取得し、読みやすいビューを準備しています。
通常は数秒で完了しますので、お待ちください。
