Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!06.07.2023
Парадигми текстових редакторів для коду
Хоча код, майже завжди, є звичайним текстом, його редагування ставить особливі вимоги до редактора. На відміну від “просто тексту” код має взаємоповʼязані частини, які треба редагувати разом — тобто займатися рефакторингом. Є декілька підходів до того, як це робити, хочу їх розглянути. Далі номенклатура моя, може хтось по-іншому ділить.
-
Звичайні текстові редактори. Окрім Ctrl+C/Ctrl+V, будь-який редактор, що себе поважає, вміє робити масовий пошук та заміну. Візьмемо це за основу. Цього достатньо для базових операцій, таких як перейменування змінної, але якщо треба, наприклад, перетворити перелік атрибутів на набір функцій, які їх повертають, то це доведеться робити вручну.
-
Редактори з підтримкою рефакторингу Спеціалізовані редактори (або спеціалізовані доповнення для них) розуміють структуру коду та пропонують команди для виконання обмеженого переліку операцій рефакторингу. Тут може бути й перейменування функції по всьому проєкту, й винос коду в нові функції, і так далі. Все це дуже круто, але не гнучко. Наприклад, знайти в журналі всі згадки деякого атрибута та перетворити їх на масив — такої функції в IDE не знайдеш, бо вона надто специфічна.
-
Командний режим (Vim). Вся сіль Vim в тому, що все що в ньому робиться, можна записати та відтворити. Замість того, щоб робити редагування “в реальному часі”, можна підготувати макрос, а потім запустити стільки разів, скільки це потрібно. (Це підкріплено системою стислих команд для переміщень.) Командна мова дозволяє робити мультиплікативно більше дій за менше натискань клавіш, що робить Vim дуже потужним редактором в жанрі tactical turn-based code golf.
-
Редагування декількома курсорами — нарешті, мій улюблений. Ідея проста — курсор (а точніше, виділення) в такому редакторі можна поставити багато разів. Тоді всі команди редактора застосовуються до кожного курсора. Зазвичай курсор ставиться не вручну, а командою “виділити всі випадки” (перед чим маємо виділити один з потрібних шматків тексту), або командою “поставити курсор в кінець кожного рядка” (теж перед цим виділивши потрібні рядки). Далі звичайними командами можна робити те ж саме, що й командний режим, але в реальному часі, що дозволяє швидко ітерувати зміни (не спрацювало один раз — скасовуємо, пробуємо щось інше.) Можу навести реальний приклад, як воно розвʼязує задачу замість непрямого підходу. Вся похвала багатокурсорності в один пост не влізе, тож продовжу завтра.