Чому я користуюсь Vim і раджу спробувати іншим. Розповідь розробника

Почну з головного: я обожнюю Vim. Це, звісно, не така вже й суперновина, якби не кілька уточнень: я переважно .NET-розробник і використовую Vim для роботи з .NET-кодом. Тут може бути два питання: «Як?» і «Навіщо?». І ця стаття відповість більше на останнє і трохи на перше (звісно, якщо аудиторію зацікавить, то можна буде розкрити краще й перше).

Отже, що ми маємо. Дядько, що займається програмуванням за гроші вже близько 20 років, 19 із яких сидів на Windows, робив доповіді та майстер-класи з ReSharper, зараз активно топить за Vim. З якого дива? Щоб відповісти на це, розкажу свою історію: з чого все починалось і куди згодом прийшло. Олди тут? Будете виправляти, якщо щось наплутаю :)

Ілюстрація Аліни Самолюк

Що таке Vim

Це текстовий редактор, що працює у консолі. Його головна стратегія залучення нових користувачів полягає в тому, що після того, як людина потрапляє у Vim (як правило, випадково), вона довго не може з нього вийти. Редактор має доволі архаїчний вигляд, і фраза «я програмую у Vim» нерідко викликає сміх і здивування у розробників. Але «не всьо так адназначна».

Трішки історії

Програмуванням я почав цікавитись на початку дев’яностих, коли воно ще не було модним. Та й навіть комп’ютерів у вільному доступі не було. Першим моїм компом був «Правец 8Д» (вже дорослим я дізнався, що це був болгарський клон Apple II), ігри та програми на нього завантажувались через магнітофонні касети, і він під’єднувався до телевізора. Звісно, він працював у текстовому режимі. Потім з’явилась можливість попрацювати з MS-DOS — там був Turbo Pascal, Norton Commander, де я вперше побачив псевдографіку. Це коли в текстовому режимі зі спеціальних символів малювались вікна з тінню, крапочки та меню. На якомусь етапі в моє життя зайшов маніпулятор типу миша.

Також я читав різні журнали про новинки комп’ютерної науки та техніки й одного разу натрапив на статтю про графічні оболонки. Замість текстового режиму такі оболонки використовували графічний режим, у якому малювали символи та імітували текстовий (навіть курсор блимав). Для мене це було чимось фантастичним, бо я не міг уявити, якою потужною повинна бути система, що може дозволити собі імітувати текстовий режим у графічному. Коли за кілька років я вперше сів за Windows (ще вдалось застати 3.11), я був у захваті. Ну а потім з’явилась «95», і поступово я звик і до неї.

Перше знайомство

У ті часи я програмував на Delphi (той самий Turbo Pascal, але під Windows), потім перейшов на .NET та Visual Studio. Якраз на початку мого шляху у .NET я працював в одній кімнаті з командою, яка робила дивні, як на мене, речі. Вони писали .NET-код у FAR (це файловий менеджер, який копіював зовнішній вигляд текстового Norton Commander) і використовували CVS у консолі. І саме від них я вперше почув про Vim (чи просто Vi — вже не пам’ятаю).

Як це було: один мій «співкамерник» порадив іншому спробувати цей редактор, і той спочатку посміявся типу «та ну його, маячня якась», а потім прийшов у понеділок і сказав, що посидів у вихідні над цим і зрозумів Vim, він прикольний. А я от не зрозумів. Я тоді якраз дізнався про новий продукт від компанії JetBrains — ReSharper. Пізніше мені показали SVN з чудовим TortoiseSVN, де все інтегрувалося одразу у провідник. OMG, що ще було треба?

Саме так я знехтував першим сигналом і на багато років поринув у світ решарпера та GUI-інструментів. Я вирішив, що треба підвищувати ефективність роботи. Опанував ReSharper майже досконало, активно користувався комбінаціями клавіш і тішився зі свого продуктивного «alt-enter driven development» підходу. «Працювати менше, робити більше» стало моїм гаслом. Я зрозумів, що мишка не допомагає у цьому, а лише заважає. Адже треба відірвати руку від клавіатури, намацати мишку, повозити нею, десь клацнути і потім повертати руку назад. Саме в той час я купив собі ноутбук, щоб користуватись тачпадом, і це було справді круто.

Одночасно з тим, як я підвищував свою швидкість як програміста, почав помічати проблеми інструментів. ReSharper відчутно пригальмовував і не встигав за моєю думкою. Це було неприємно, тому що без нього я вже не міг працювати. Я добряче на нього підсів і почав замислюватись, чи це справді так добре. Коли у своїй кар’єрі я дійшов до написання Front-end, то усвідомив, що став буквально рабом інструменту. Звісно, я почав писати у Visual Studio, і там ReSharper навіть якось намагався допомогти, але його можливості були настільки обмежені, що написання JS-коду було справжньою мукою. Водночас офіційний туторіал з Angular передбачав використання консольних команд, і працювати з ними було одне задоволення. «Хм, а консоль має право на життя», — подумав я тоді.

До того я вже замислювався над тим, що GUI-інструменти не дають тієї гнучкості, якої хочеться. Наприклад, в них досить обмежені можливості щодо автоматизації. Тоді як консольну команду можна зберегти у файл і викликати скільки завгодно. Я відкрив для себе Git і зрозумів, що найзручніший спосіб його використання — саме через консоль.

Звісно, cmd не можна було назвати зручною. В ті часи активно просувався PowerShell, і я вирішив його опанувати: використовувати для операцій з файлами замість провідника, редагувати реєстр, керувати Windows. Я відкрив для себе ConEmu, Posh-Git і багато іншого. Навіть з Azure намагався працювати через консоль.

Наприкінці нульових матеріалів про bash було набагато більше, ніж про PowerShell. Якщо шукати вирішення проблем з консольними командами, частіше натрапляв на bash-відповіді, які потрібно було адаптувати під PowerShell. З появою Docker та WSL з’явилось відчуття, що краще переходити на bash. Це було не просто, адже філософія PowerShell дуже відрізняється від bash. Якийсь час я жив у двох світах одночасно. Половину задач робив через PowerShell, а половину — у WSL через bash. Це складно і неприкольно.

А як щодо розробки

Що більше я користувався не .NET-технологіями, то більше я усвідомлював, що IDE не обов’язкові. У вас є можливість запустити консольну команду, яка перекомпілює код, щойно в ньому з’являться зміни (ng serve для Angular). Звісно, був варіант переходу на IDE від JetBrains: у них однакові інтерфейси й можна не змінювати звички. Проте є дві проблеми. Перша — це той самий vendor lock. Якщо ви захочете спробувати мову, для якої немає IDE, будете страждати. А друга проблема — це недосконалість GUI-інструментів. Вони завжди будуть підтримувати лише обмежену підмножину доступних програм. Щоб якийсь новий чи оновлений інструмент став доступний, треба дочекатись, аби його підтримку хтось додав.

І ще одна біда — IDE змушує вивчити свій унікальний спосіб взаємодії з програмою. Наприклад, для роботи із залежностями npm там буде свій UI. І якщо ви зіткнетеся з проблемами, то можна буде швидко нагуглити рішення для консолі, а на пошук того, як це розв’язати у WebStorm, знадобиться більше часу. Тому я для себе відкрив чудову комбінацію: VS Code + консоль. В першій я писав код, а в другій робив все інше: білд, залежності, тести тощо.

У той час я сидів на Docker і Kubernetes. Я вже змирився, що основний двіж йде у Linux, що навіть .NET Core треба запускати на ньому. У Windows була вбудована Linux (WSL), я нею активно користувався і... страждав. Постійно вилазили якісь проблеми, а їхні рішення, що гуглились для Linux/MacOS, нерідко потребували допрацювання напилком. Там треба якісь дозволи дати, тут поміняти CRLF на LF, ще щось доробити. Не все працювало із WSL: та сама VS Code запускалась на Windows. І там треба було теж підтримувати набір інструментів. Завжди потрібно було пам’ятати, звідки що запускати (Docker — з Windows, Curl — з WSL тощо). Дві HOME папки, різні менеджери пакетів (Chocolatey для Windows, apt-get для WSL), різний набір команд (PowerShell vs bash).

Це все потрохи накопичувалось, і я раптом усвідомив, що Windows мені насправді не потрібна. Від OS мені треба лише консоль та VS Code (ну і браузер, щоб гуглити рішення на Stack Overflow), майже вся моя робота відбувається у WSL, то, може, спробувати перейти з Windows на щось більш природне для такого сетапу?

І так торік я перейшов на MacBook. І це було одне з найкрутіших рішень у моєму професійному житті. Всі проблеми зникли, натомість лишилась одна — відсутність фізичної клавіші esc, хоча я швидко до цього звик. А оскільки проблеми зникли, то я подумав, а чи не прибрати останній GUI-інструмент, а саме VS Code? Адже я використовував його лише як текстовий редактор і разом з терміналом. А що як працювати лише в терміналі?

Саме тут вдруге з’являється Vim. Коли я вирішив знову його розглянути, я тільки вмів з нього виходити. Це, звісно, неабияке досягнення (можете подивитись кількість лайків на питання і відповідь на Stack Overflow), проте я все ж не розумів, як Vim може бути зручним. Так, там є команди, вони задаються комбінаціями клавіш, але як їх всіх запам’ятати? Хіба може нормальна людина, а тим паче після Windows і мишки, запам’ятати, що комбінація bveP копіює слово (тобто double click мишкою, стрілка вправо, cmd-V)? З іншого боку, ним користується багато людей, навряд чи вони робили б це, якби це було незручним. Тож тут, певно, є якийсь секрет.

Я загуглив, як користуватись Vim, і натрапив на пост про Vim language. Виявляється, команди не треба запам’ятовувати, натомість варто зрозуміти мову взаємодії з Vim. Якщо коротко, то є дієслова (додати, замінити, видалити), модифікатори (всередині, навколо) і об’єкти (слова, рядки, параграфи). І ваш діалог з редактором більше схожий на розмову: наприклад, «заміни три слова якимось текстом буде c3w, тобто change 3 words». Логічно і зрозуміло. Головна фішка полягає в тому, що для редагування тексту ви використовуєте ті самі рухи пальцями, що і для його написання. І в тому, і в іншому випадку ви друкуєте — або команди, або текст.

Наступним моїм відкриттям був Vimtutor. Ця штука навчає роботи з Vim у самому Vim. Ти пишеш у консолі Vimtutor, відкривається Vim з описом різних можливостей та завданнями, якими можна швиденько засвоїти матеріал на практиці. Кілька разів пройшов Vimtutor — і можеш нормально користуватись редактором!

Далі я почав читати різні блоги й дивитись ролики на ютубі. Знайшов багато матеріалу на будь-який смак. Безліч юзер-груп публікують свої відоси, де люди діляться досвідом і розповідають про різні підходи та плагіни. Усі питання швидко гугляться.

Для Vim є багато різних плагінів, які додають нові можливості, проте не завжди вони такі й нові. У стандартній конфігурації Vim напрочуд функціональний. І перед тим, як ознайомитись з плагінами, адепти рекомендують попрацювати без них, аби зрозуміти, що він насправді може. Ось непоганий туторіал для людей, які люблять засвоювати нові поняття методично. Також можна погуглити відео Vim without plugins. Я міг би, звісно, розказати про плагіни, які використовую, проте це потягне на окрему статтю (і таких статей можна нагуглити багато). До того ж я не вважаю свій набір плагінів чимось досконалим: я періодично щось змінюю і маю надію, що цей матеріал проживе довше, ніж мій поточний конфіг Vim.

За доволі короткий час я почав комфортно почуватися у цьому редакторі й використовувати його для майже всіх своїх справ. Навіть для роботи з .NET-кодом він чудово підходить. Якщо його опанувати, можна бути більш продуктивним, ніж з IDE. Там є можливість налаштування auto completion, quick actions та інших речей, притаманних лише IDE. Це, звісно, холіварна тема, кожний кодить, як хоче, я кажу за себе. Формально для редагування тексту Vim потребує меншу кількість натискань на клавіші, отже, треба менше часу. Також йому треба менше ресурсів, щоб відрендерити код. Він не просто швидкий — він блискавичний (звісно, якщо не зловживати плагінами). Що швидше ти друкуєш, то швидше працюєш з редактором.

Виявилось, що команди Vim використовуються і в інших місцях. Наприклад, у zsh консолі є vi mode — коли можна редагувати набрані команди нею. Чимало Linux-утиліт використовують Vim-шорткати для навігації, пошуку тощо. Є розширення для браузерів Vimium, яке дає змогу користуватись навігацією сторінки, пошуком у документі, відкритими вкладками, вікнами тощо через підходи з Vim. Тобто раз помучився, а потім відкриваєш все нові місця, де ці навички можна застосовувати. Це дуже круто.


Ось така історія. Пишіть у коменти свої питання або розкажіть, чому це все неправильно :)


Щоби не пропустити нові статті Сергія Калінця — підписуйтеся на нього у телеграм-боті Стрічки DOU.

Похожие статьи:
Ряд небезосновательных слухов и утечек информации уже подтвердил факт выпуска компанией OnePlus смартфона OnePlus X, который станет вторым...
Мы попросили IT-специалистов рассказать о том, какие подкасты они слушают и чем именно они им нравятся. Антон Романьков, FullStack...
JavaScript зберегла статус найпопулярнішої мови програмування на GitHub цього року. Перша пʼятірка мов залишилася незмінною...
Українців навчатимуть, як користуватися віртуальними активами на курсі з криптограмотності й блокчейну....
Компания Dell представила на российском рынке обновленное семейство недорогой техники Inspiron. Новинки...
Яндекс.Метрика