Редагування файлів
Коли вам потрібно змінити файл, а не просто подивитися на нього, Peach Commander відкриває його у вбудованому редакторі. Текстові файли та файли коду відкриваються в повноцінному редакторі з підсвічуванням синтаксису, пошуком і заміною, оглядом символів у вашому коді та мінімапою для швидкої навігації. Двійкові файли можна відкрити в окремому шістнадцятковому редакторі, де ви можете інспектувати та змінювати окремі байти. Вам ніколи не доведеться залишати застосунок, щоб зробити швидке редагування.
Редагування текстового файлу або файлу коду¶
- У будь-якій панелі перемістіть курсор на файл, який потрібно змінити.
- Натисніть F4 або виберіть Файл ▸ Редагувати. Файл відкривається у вікні редактора.
- Зробіть свої зміни. Якщо файл є розпізнаним форматом програмування чи даних, ключові слова, рядки та коментарі забарвлюються автоматично.
- Натисніть 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.
Редагування файлу байт за байтом¶
- Позначте файл у панелі.
- Виберіть Файл ▸ Редагувати як Hex (або клацніть файл правою кнопкою та виберіть Редагувати як Hex).
- Вводьте шістнадцяткові цифри, щоб перезаписати байти, або використовуйте клавіші зі стрілками, щоб рухатися файлом. Backspace і Delete вилучають байти.
- Натисніть 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. - Огляд символів і функція «Перейти до рядка» застосовуються до текстового редактора. Шістнадцятковий редактор призначений для двійкового інспектування та редагування на рівні байтів, а не для тексту.
- Обидва редактори зберігають резервну копію оригінального файлу під час першого збереження, тож випадкову зміну легко скасувати, відновивши цю резервну копію.