# Edit

Выполняет точную замену строки внутри существующего файла. Это предпочтительный способ модифицировать файлы, поскольку передаётся только дифф, что делает правки точными и поддающимися аудиту.

## Когда использовать

- Исправление ошибки в одной функции без перезаписи окружающего файла
- Обновление значения конфигурации, строки версии или пути импорта
- Переименование символа по всему файлу с `replace_all`
- Вставка блока рядом с якорем (расширьте `old_string`, включив окружающий контекст, затем укажите замену)
- Применение небольших, чётко очерченных правок в рамках многошагового рефакторинга

## Параметры

- `file_path` (string, обязательный): абсолютный путь к изменяемому файлу.
- `old_string` (string, обязательный): точный текст для поиска. Должен совпадать символ в символ, включая пробелы и отступы.
- `new_string` (string, обязательный): текст замены. Должен отличаться от `old_string`.
- `replace_all` (boolean, необязательный): если `true`, заменяет каждое вхождение `old_string`. По умолчанию `false`, что требует уникальности совпадения.

## Примеры

### Пример 1: исправление одного места вызова
Задайте `old_string` в виде точной строки `const port = 3000;`, а `new_string` — `const port = process.env.PORT ?? 3000;`. Совпадение уникально, поэтому `replace_all` можно оставить по умолчанию.

### Пример 2: переименование символа по всему файлу
Чтобы переименовать `getUser` в `fetchUser` везде в `api.ts`, задайте `old_string: "getUser"`, `new_string: "fetchUser"` и `replace_all: true`.

### Пример 3: устранение неоднозначности повторяющегося фрагмента
Если `return null;` встречается в нескольких ветках, расширьте `old_string`, включив окружающий контекст (например, предшествующую строку `if`), чтобы совпадение стало уникальным. Иначе инструмент выдаст ошибку, а не будет гадать.

## Примечания

- Перед тем как `Edit` примет изменения, нужно хотя бы раз в текущей сессии вызвать `Read` для этого файла. Префиксы с номерами строк из вывода `Read` не являются частью содержимого файла; не включайте их в `old_string` или `new_string`.
- Пробельные символы должны совпадать точно. Обращайте внимание на табы против пробелов и хвостовые пробелы, особенно в YAML, Makefile и Python.
- Если `old_string` не уникален, а `replace_all` равен `false`, правка завершится ошибкой. Либо расширьте контекст, либо включите `replace_all`.
- Предпочитайте `Edit` перед `Write`, когда файл уже существует; `Write` перезаписывает весь файл и теряет несвязанное содержимое, если не быть аккуратным.
- Для нескольких несвязанных правок в одном файле делайте несколько последовательных вызовов `Edit` вместо одной громоздкой и хрупкой замены.
- Избегайте добавления эмодзи, маркетинговых формулировок или незапрошенных блоков документации при правке исходных файлов.
