[Перевод] Почему я перестал использовать Vim

Говорят, однажды попробовав Vim, назад уже не вернешься.

Для разработчика Vim может быть опасен. Особенно, если коллеги настаивают на его использовании или, как минимум, тонко намекают. Как если бы ты был Нео из «Матрицы», и вдруг в обычный, ничего не предвещающий день…

Опа! Сбой в матрице.

Выбор за тобой. Потом пути назад уже не будет. Примешь синюю таблетку — история закончится, ты проснёшься в своей постели и будешь верить, что GUI — это сила. Примешь красную — и останешься в Стране Чудес, а я покажу тебе, насколько глубока кроличья нора Vim. Помни — я предлагаю только правду, и ничего более.

142c422b90c767d5f5c537f496c6db51.png

Красную таблетку или синюю?

288662551bc4daab42d21646605236cd.png

Предпочтешь красную или закончим на этом?

Клик — и ты вновь в повседневных иллюзиях…

Клик — и ты войдёшь в Страну Чудес…

Принимаю красную

Как и многие из нас, я выбрал красную таблетку. Если вы программист, то наверняка слышали различные шутки о том, как трудно выйти из Vim и что его изучение подобно катанию на американских горках.

Всегда умиляюсь, наблюдая, как кто-то пытается в первый раз покинуть Vim

Всегда умиляюсь, наблюдая, как кто-то пытается в первый раз покинуть Vim

Вопреки распространенному мнению, существует множество причин использовать Vim. Если вы относитесь к тому типу программистов, которые наслаждаются жизнью в терминале и могут легко обходиться без графического интерфейса, то Vim — отличный выбор для редактирования кода.

Явное преимущество Vim становится очевидным при подключении по SSH к удаленным серверам. В таких сценариях VS Code не слишком удобен, в то время как для ввода «vim» с клавиатуры и начала редактирования потребуется всего пара секунд. Не нужно решать потенциальные проблемы с обновлениями, дающими сбой или конфликтующими с расширениями. В таких ситуациях трудоёмкая отладка вам обеспечена. Кроме того, VSCode принадлежит Microsoft, но, являясь продуктом с открытым исходным кодом, потенциально уязвим для злоумышленников. Таким образом риск, связанный с использованием исключительно VS Code, будет неоправданным. С другой стороны, Vim в качестве редактора имеет устойчивую репутацию и, вероятно, останется актуальным даже через 20–30 лет.

Что же такое Vim?

Vim не таит в себе никакого волшебства. Он ориентирован на программистов.

По мере погружения в тайны Vim у меня начало складываться представление о нём. В упрощённом виде его работу отображает эта диаграмма.

Более продвинутые читатели увидят в ней так называемую машину с конечным числом состояний (Finite State Machine, FSM), но для простоты я буду называть ее диаграммой.

Источник: Сообщество StackOverflow, Vi редактор в виде машины с конечным числом состояний (FSM)

Источник: Сообщество StackOverflow, Vi редактор в виде машины с конечным числом состояний (FSM)

Из приведённой диаграммы хорошо видно, как вводится команда, а затем по нажатию < i > осуществляется переход в режим вставки. Далее < ESC > возвращает нас к исходному режиму. Теперь нажимаем < : > и переходим в другой режим, клавишей < w > изменения фиксируются.

Это можно сравнить с работой Git’а, когда после комбинации git add и git commit изменения перемещаются в репозиторий.

Набор важных команд VIM

# Выйти
:q!
# Сохранить и выйти
:wq
# Отменить последнее изменение
u
# Отобразить номера строк
:set number
# Убрать номера строк
:set nonumber
# Изменение текста внутри () {} [] '' открывающих и закрывающих скобок
ci(/{/[
# Перемещение в начало строки
_
# Перемещение в конец строки
$
# Перемещение курсора вверх/вниз
j/k
# Перемещение курсора на 10 строк вверх/вниз
10j/10k
# Перемещение курсора влево/вправо
h/l
# Перемещение курсора на 10 символов влево/вправо
10h/10l
# Перемещение в начало файла
:1
# Или
Нажмите gg
# Перемещение в конец файла
:$
# К последней строке
G
# Открыть файлы в разных окнах по вертикали/горизонтали
vim -o/O file1 file2
# Разделить окно по горизонтали/вертикали
:split/vpslit -
# Открыть файл вместо текущего
:edit PATH/file1
# Перемещение между областями разбиения файла
CTRL+W , → ↑←↓
# Удалить слово
:dw
# Удалить 2 слова
:d2w
# Удалить всю строку
:dd
# Удалить 3 строки
:3dd
# Удалить до символа «а»
:dta
# Удалить от символа 'a'
:dfa
# Копирование/вставка
y/p
# Найти
:/pattern
# Открытие новой пустой вкладки в Vim
:tabnew
# Открыть вкладку с заданным файлом
:tabnew PATH/file
# Закрыть вкладку
:tabclose
# Перейти на следующую вкладку
:gt
# Перейти к предыдущей вкладке
:gT
# Переключение на первую/последнюю вкладку
:tabfirst/tablast

А может, принять обе таблетки?

После долгого воздействия «красной таблетки» вам стало чего-то не хватать? Мне, несмотря на интуитивно понятную привязку клавиш, Vim по-прежнему казался слишком ограниченным. Я решил поэкспериментировать с такими плагинами, как NERDTree, VimBundle, Plug, fzf, NeoVim и т.д. Но даже с многочисленными возможностями кастомизации и притязаниями Vim находиться в топ-листе редакторов, мне так и не удалось избавиться от ощущения странной пустоты.

Источник: Википедия — Матрица

Источник: Википедия — Матрица

Чего мне не хватает? — cпросил я у Оракула.

Ты скучаешь по ощущениям. По тем, которые не можешь воспроизвести. Перестань себя обманывать, ведь путь проходит не только там, где ты сейчас, но и там, где ты уже был.

И пришло ко мне понимание — я пытался отрицать тот факт, что мне нравится визуальный подход к написанию кода. Наглядность графического интерфейса помогает мне. От просмотра конфликтов Git до линтинга, выделения строк и всего такого прочего.

Учась языку Java на BlueJ в детстве, я осознал важность графического аспекта. Несмотря на мнение об элитарности Vim, я убеждён, что программирование — многогранная область. Люди обладают разными предпочтениями, некоторые из них более склонны к визуальным, слуховым или математическим подходам.

Если бы редакторы на основе графического пользовательского интерфейса не имели своих преимуществ, у нас не было бы различных плагинов, иконок и прочих надстроек для Vim. Своей простотой он напоминал бы обычный терминал. Веб-интерфейс Jupyter Notebook не был бы создан, если бы Python REPL был реально удобен в использовании. Отпала бы необходимость в PyPI или Git Kraken. По иронии судьбы, сама концепция Vim использует математическую парадигму в виде машины с конечным числом состояний (FSM), которая тесно связана с классом графических моделей. Визуальную и математическую идеологии нельзя просто взять и отделить от кода, они идут рука об руку.

Есть золотая середина: использование VS Code с привязками клавиш Vim. Мне это помогло. Скорость и эффективность Vim сочетается с богатыми возможностями, предоставляемыми Visual Studio Code. Это лучшее из обоих миров. Интересно, сколько людей использует подобные редакторы только для того, чтобы выглядеть крутыми, несмотря на то, что ненавидят этот инструмент?

Выводы

В заключение хочу сказать — моё знакомство с Vim было похоже на принятие красной таблетки и путешествие в страну традиционных сред программирования. Хотя изначально Vim покорил меня своей эффективностью и мощным интерфейсом командной строки, вскоре я осознал ценность поиска баланса. Независимо от того, к какому подходу вы склоняетесь, важно найти золотую середину. На мой взгляд, VS Code с привязками клавиш Vim объединяет всё самое лучшее. Давайте помнить: в стремлении к кодерскому мастерству нам должны сопутствовать гармония и баланс между эффективностью и лёгкостью работы!

© Habrahabr.ru