Skip to content

Редактирование файлов

Когда нужно изменить файл, а не просто взглянуть на него, Peach Commander открывает его во встроенном редакторе. Текстовые файлы и файлы кода открываются в полноценном редакторе с подсветкой синтаксиса, поиском и заменой, структурой символов вашего кода и мини-картой для быстрой навигации. Двоичные файлы можно открыть в отдельном шестнадцатеричном редакторе, где вы можете просматривать и изменять отдельные байты. Вам никогда не нужно покидать приложение, чтобы внести быстрое изменение.

Редактирование текстового файла или файла кода

  1. В любой панели переместите курсор на файл, который хотите изменить.
  2. Нажмите F4 или выберите Файл ▸ Редактировать. Файл открывается в окне редактора.
  3. Внесите изменения. Если файл имеет распознанный формат программирования или данных, ключевые слова, строки и комментарии окрашиваются автоматически.
  4. Нажмите Cmd+S (или щёлкните «Сохранить»), чтобы записать изменения. Первое сохранение сохраняет резервную копию оригинала рядом с файлом, чтобы вы всегда могли к ней вернуться.

Чтобы начать совершенно новый текстовый файл в текущем расположении, нажмите Shift+F4.

Встроенный текстовый редактор с подсветкой синтаксиса, структурой символов и мини-картой (Рис.: Редактор с подсветкой синтаксиса, структурой символов слева и мини-картой справа.)

Если файл принадлежит root — запись в /etc, plist launchd, конфигурация веб-сервера — при сохранении предлагается сделать это с правами администратора: macOS запрашивает авторизацию обычным образом, содержимое передаётся через приватный временный файл, а не через командную строку, и файл сохраняет своего владельца и права, а не становится тихо вашим.

Если файл нельзя записать, вы узнаёте об этом при открытии, а не при попытке сохранить: в заголовке появляется замок, а строка состояния называет препятствие — принадлежит другому пользователю, права запрещают запись, файл заблокирован, том только для чтения или защита системы. Только первое решается авторизацией сохранения, и только там она предлагается; в остальных случаях она стоила бы вам пароля и всё равно не помогла.

На поле показаны номера строк, строка с курсором светлее остальных; кнопка рядом с меню кодировки его скрывает. Перенесённая строка нумеруется один раз, поэтому номер всегда означает ту же строку, что и ошибка компилятора или замечание при разборе.

Поиск, замена и навигация

  • Нажмите Cmd+F, чтобы открыть панель поиска. Чтобы заменить текст, откройте панель поиска и переключите её в режим замены или щёлкните «Найти/Заменить» на панели инструментов.
  • Щёлкните «Форматировать JSON/XML», чтобы заново расставить отступы в документе JSON или XML, приведя его к аккуратному, читаемому виду.
  • Щёлкните «Символы» (или нажмите Cmd+Shift+O), чтобы показать боковую панель со списком классов, функций и методов вашего кода — либо, для файла JSON, YAML или XML, его ключей и элементов. Щёлкните запись, чтобы сразу перейти к ней. Чем ещё полезна эта структура, см. Работа с JSON, YAML и XML.
  • Нажмите Cmd+L, чтобы перейти к определённой строке.
  • Нажмите Cmd+\, чтобы перейти между скобкой и парной ей.
  • Щёлкните кнопку карты, чтобы показать или скрыть мини-карту — масштабированный обзор всего файла, по которому можно щёлкать для прокрутки.
  • Используйте меню «Кодировка» на панели инструментов, если файл был сохранён в кодировке, отличной от кодировки текста по умолчанию.

Работа с JSON, YAML и XML

Эти три формата обрабатываются особо: по файлу настроек перемещаются по его структуре, а не по номерам строк.

Боковая панель Символы показывает ключи файла JSON или YAML и элементы файла XML, вложенные так же, как и сам документ. Элемент называется по атрибуту id, name или key, если он есть, поэтому двадцать записей <server> различимы. Список показывает свои записи как [0], [1], а если запись начинается с ключа, показан и он — [0] name. Поле фильтра над списком находит ключ по имени в файле любого размера, а строка состояния всегда показывает путь к тому, внутри чего находится курсор.

Даже повреждённый файл получает структуру до того места, где он ломается, — а именно тогда она нужнее всего.

Меню Структура — в строке меню, пока редактор впереди — перемещает вас по этой структуре:

  • Перейти к охватывающему узлу (Ctrl+Cmd+Вверх) выходит к блоку, содержащему курсор: от image: к службе, которой он принадлежит.
  • Перейти к первому потомку (Ctrl+Cmd+Вниз) входит внутрь.
  • Перейти к предыдущему / следующему соседу (Ctrl+Cmd+Влево / Вправо) перемещается между записями одного уровня, перескакивая весь блок между ними, — от одного сервера к следующему, не прокручивая сорок строк настроек.
  • Выбрать охватывающий узел (Ctrl+Cmd+A) выделяет блок, в котором стоит курсор. Нажмите ещё раз, и выделение вырастет до блока вокруг него, так что вы выделите ровно одну службу или ровно один элемент без перетаскивания.
  • Скопировать структурный путь (Ctrl+Cmd+C) копирует позицию курсора как выражение, которое принимают собственные средства формата: .services.web.ports[0] для JSON и YAML — именно этого ждут jq и yq, — и //server[@id='web-1']/port для XML, то есть XPath. Ключи, не являющиеся простыми словами, берутся в кавычки за вас: ."content-type", а не .content-type, что в jq означает совсем другое.
  • Проверить документ (Ctrl+Cmd+V) проверяет файл и ставит курсор на проблему, а причину пишет в заголовке окна. Сообщается и то, о чём не скажет ничто другое в цепочке средств: повторяющийся ключ, который любой разборщик JSON принимает молча, отбрасывая одно из двух значений, и запятая в конце, которую разборщик Apple принимает, а Python, Go и jq отвергают.

Длинные файлы читают, свернув то, с чем сейчас не работают. Свернуть узел (Option+Cmd+Влево) сворачивает блок, в котором стоит курсор, — ближайший, у которого есть тело, так что нажатие на одиночной строке сворачивает окружающее её отображение; Развернуть узел (Option+Cmd+Вправо) снова его открывает, Свернуть верхний уровень (Option+Cmd+Вверх) сворачивает всё на самом внешнем уровне для обзора, а Развернуть всё (Option+Cmd+Вниз) возвращает как было. Строка с ключом или тегом остаётся видимой и помечается, поэтому свёрнутый блок видно как свёрнутый; номера строк пропускают скрытое. Из документа ничего не удаляется — текст просто не рисуется, поэтому сохранение, отмена и поиск не меняются, а поиск по-прежнему находит текст внутри свёрнутого блока. Если поставить курсор внутрь свёрнутого места, оно откроется, а любое изменение открывает всё: свёртка — это пара позиций, и вставленный текст их смещает.

В том же меню находятся преобразования, которые переписывают весь документ — или, если выделен текст, только его — одним отменяемым действием: Сжать (одна строка) для тела JSON, которое должно поместиться в команду curl, Отсортировать ключи рекурсивно, чтобы две выгрузки одних и тех же настроек не отличались, Экранировать как строку JSON и Снять экранирование строки JSON для ежедневной работы, когда сертификат, скрипт или целый документ JSON нужно поместить внутрь поля JSON, и Преобразовать JSON в YAML. Сжатие сохраняет порядок ключей и точное написание каждого числа, потому что 1.0 и 1 — это не одна и та же версия; сортировка этого намеренно не делает, ведь сортировка и есть переупорядочивание. Экранирование применимо к любому файлу, не только к JSON. Преобразования из YAML в JSON нет, и это решение: для него нужен разборщик YAML, которого нет в системе, а неверное предположение о якоре или о true в кавычках превращает файл настроек в другой файл.

JSON и XML проверяет настоящий разборщик. Для YAML в системе его нет, поэтому проверка охватывает ошибки, которые можно найти без него: табуляцию для отступа, что YAML прямо запрещает, отступ, не совпадающий ни с чем, повторяющийся ключ, незакрытую кавычку — и говорит об этом, а не объявляет файл корректным.

Фильтрация командой оболочки

Нажмите Фильтровать… (или клавиши Shift+Cmd+), чтобы передать выделенный текст команде и заменить его тем, что команда выведет. Если ничего не выделено, через команду проходит весь документ. Так привычные вам инструменты становятся командами редактора: sort -u убирает повторяющиеся строки, jq . делает JSON-ответ читаемым, column -t выравнивает таблицу, base64 -d декодирует блок, openssl x509 -noout -text показывает сертификат в понятном виде.

Команда выполняется в вашей оболочке входа: PATH, псевдонимы и функции работают точно так же, как в Терминале, а конвейеры и кавычки означают именно то, что вы ожидаете. Рабочим каталогом служит папка редактируемого файла, поэтому относительные пути разрешаются там, где вы этого ждёте. Использованные команды запоминаются и в следующий раз предлагаются в раскрывающемся списке.

Если команда завершилась с ошибкой, ваш текст остаётся нетронутым, а её сообщение об ошибке появляется в строке состояния — синтаксическая ошибка jq никогда не окажется вставленной в файл. Команда, которая ничего не выводит, очищает выделение; именно для этого и фильтруют с помощью grep, а Cmd+Z возвращает текст. Команда, которая не завершается, останавливается через двадцать секунд.

Сортировка, удаление повторов и уборка строк

Меню Строки — на панели инструментов и, пока редактор впереди, в строке меню — выполняет правки, которые возникают снова и снова, без набранной команды и без установленных инструментов:

  • Сортировать А→Я или Я→А, сравнивая числа по значению, так что file9 идёт перед file10.
  • Обратить порядок строк.
  • Удалить повторяющиеся строки, оставив первую из каждой и не меняя порядок остальных.
  • Удалить пустые строки, включая те, что выглядят пустыми лишь потому, что содержат пробелы.
  • Убрать пробелы в конце строк — невидимое различие, из-за которого diff становится шумным.
  • Оставить только строки, содержащие введённый вами текст, либо наоборот удалить их.

Если текст выделен, каждая из операций работает с выделенными строками; выделение сначала расширяется до целых строк, потому что сортировать половину строки бессмысленно. Без выделения они применяются ко всему документу. Каждая — один шаг отмены, поэтому Cmd+Z возвращает всю операцию.

Переводы строк стоят рядом с меню «Кодировка»: LF для Unix и macOS, CRLF для Windows, CR для классической Mac OS и (mixed), когда в одном файле встречается несколько видов — часто именно из-за этого возникает необъяснимая ошибка. Выберите другой, чтобы преобразовать весь файл одним отменяемым шагом. Операции со строками никогда не меняют перевод строки сами: отсортированный файл с CRLF остаётся CRLF.

Форматирование файла

Нажмите «Форматировать» в редакторе (та же команда есть в просмотрщике), чтобы заново расставить отступы. Peach Commander выбирает форматировщик по расширению и показывает в строке состояния, какой сработал, например formatted (jq) — так всегда понятно, что придало файлу вид.

Без установки чего-либо работают JSON, XML, SVG, plist, HTML, конфигурация в стиле INI и YAML. YAML — особый случай: он приводится в порядок, а не переотступается, потому что в YAML отступ и есть структура, и переписать его без настоящего парсера YAML значит рискнуть смыслом файла. Пробелы в конце строк исчезают, случайные табуляции в отступах становятся пробелами, серии пустых строк сжимаются — а всё внутри блочного скаляра (| или >) остаётся точно как было, потому что там пробел это содержимое.

Лучшие форматировщики подключаются сами. Если один из них установлен, Peach Commander использует его: специализированный инструмент обычно соответствует ожиданиям экосистемы — а в конфигурационных форматах сохраняет ваши комментарии:

Установите и получите
yq или prettier полное форматирование YAML, комментарии сохраняются
taplo TOML
sqlformat или sql-formatter SQL
prettier Markdown
jq JSON в общепринятом стиле
xmllint XML и SVG

Если для типа файла форматировщика нет, кнопка неактивна, а пункт меню выключен. Попытка всё равно объяснит причину — «taplo не установлен» читается иначе, чем «Недействительный JSON».

Свой собственный форматировщик

Чтобы отформатировать тип, которого Peach Commander не знает, или взять другой инструмент, создайте formatters.ini в папке настроек — по разделу на расширение:

[swift]
tool = swiftformat
args = --quiet stdin

[sql]
tool = /opt/homebrew/bin/sqlfluff
args = format -

tool — имя программы (ищется так же, как в вашей оболочке) или абсолютный путь; args передаются как есть. Текст файла идёт на стандартный ввод, отформатированный читается со стандартного вывода, поэтому подходит любой воспитанный форматировщик командной строки. Ваши записи побеждают всё остальное. При первом запуске создаётся шаблон с комментариями — откройте файл и заполните его.

Плагины тоже могут добавлять форматировщики — см. Plugins.

Редактирование файла побайтово

  1. Выберите файл в панели.
  2. Выберите Файл ▸ Редактировать как Hex (или щёлкните файл правой кнопкой мыши и выберите «Редактировать как Hex»).
  3. Вводите шестнадцатеричные цифры для перезаписи байтов или используйте клавиши со стрелками для перемещения по файлу. Backspace и Delete удаляют байты.
  4. Нажмите Cmd+S для сохранения. Как и в текстовом редакторе, сохраняется однократная резервная копия оригинала.

Сочетания клавиш

Действие Клавиша
Редактировать файл F4
Создать и отредактировать новый текстовый файл Shift+F4
Сохранить Cmd+S
Найти Cmd+F
Показать/скрыть структуру символов Cmd+Shift+O
Перейти к строке Cmd+L
Перейти к парной скобке Cmd+\
Перейти к охватывающему узлу (JSON/YAML/XML) Ctrl+Cmd+Вверх
Перейти к первому потомку Ctrl+Cmd+Вниз
Перейти к предыдущему / следующему соседу Ctrl+Cmd+Влево / Вправо
Выбрать охватывающий узел Ctrl+Cmd+A
Скопировать структурный путь Ctrl+Cmd+C
Проверить документ Ctrl+Cmd+V
Свернуть / развернуть узел Option+Cmd+Влево / Вправо
Свернуть верхний уровень / развернуть всё Option+Cmd+Вверх / Вниз
Отменить / повторить (шестнадцатеричный редактор) Cmd+Z / Cmd+Shift+Z
Отфильтровать выделение командой Shift+Cmd+\

Примечания

  • Подсветка синтаксиса охватывает JSON, C, C#, Java, JavaScript, TypeScript, Python и Rust. Другие типы файлов по-прежнему открываются и редактируются обычным образом с базовым окрашиванием, но подробная подсветка доступна только для поддерживаемых языков.
  • Структура охватывает поддерживаемые языки программирования, а также JSON, YAML и XML — включая форматы на основе XML, такие как .plist, .svg, .csproj и .storyboard. Команды структурной навигации, пути и проверки применимы к JSON, YAML и XML.
  • Функции структуры символов и перехода к строке применяются к текстовому редактору. Шестнадцатеричный редактор предназначен для двоичного анализа и правок на уровне байтов, а не для текста.
  • Оба редактора сохраняют резервную копию оригинального файла при первом сохранении, поэтому случайное изменение легко отменить, восстановив эту резервную копию.