Говорят, что однажды воспользовавшись Vim, вы уже никогда не вернетесь к нему.

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

«Вы уже пробовали Вим?»

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

Выбрал красную таблетку, чтобы продолжить или остановиться? Нажмите на изображение .

Употребление красной таблетки

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

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

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

Понимание Vim

Vim не волшебство. Это сделано для программиста.

По мере того, как я углублялся в тайны Vim, я начал лучше понимать Vim. Я упрощаю работу vim в виде этой диаграммы.

Более продвинутые читатели могут понимать это как Конечный автомат(FSM), но для простоты я буду называть его графом.

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

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

Важный набор команд VIM

# Note '/' means or 
# ':command' are Ex commands whereas rest are key-presses.
# Initially 'Press' be specfied but for rest of the commands it will be ommitted
# so as to only initially make the reader comfortable.
# Quit
:q!
# Write and quit
:wq
# Undo last change
Press u


# Set Line Numbers
: set number
#Remove Line Numbers
:set no number



#Change text inside () {} [] '' opening and closing braces
Press ci(/{/[



# Move to Start of the Line
Press _
# Move to End of the Line
Press $

# Move curosr Up/Down
j/k
# Move cursor 10 lines Up/Down
10j/10k

# Move curosr Left/Right
h/l
# Move cursor 10 char Left/Right
10h/10l




# Move to Start of File
:1 
#OR
Press gg

# Move to End of File
:$ 
#OR 
Press G
 

# Create a vertical/horizontal split of 2 files
vim -o/O file1 file2
# Create an empty horizontal/vertical split
:split/vpslit -
# Open an file in an empty split
:edit PATH/file1
# Split the same file horizontally/vertically
:split/hsplit #OR
CTRL + S / CTRL + V

# Move between file splits 
CTRL+W , → ↑←↓#and Direction or h/j/k/l
# Increase or decrease Split Height
CTRL +/-


# Delete word
:dw
# Delete 2 words
:d2w
# Delete entire line
:dd
# Delete 3 lines
:3dd
# Delete till a character 'a'
:dta
# Delete from a character 'a'
:dfa

# Copy and paste
y/p




# Search 
:/pattern
#Search with highlighting
/pattern


# Open New Empty Tab in Vim
:tabnew
# Open Tab with given File
:tabe PATH/file

# Close a Tab
:tabclose / CTRL +W , c

# Switching between Tabs
# Go to next tab
: gt
# Go to previous Tab.
: gT
# Switch to 1st/2nd/nth Tab.
:tabn 1/2/3
# Switch to First/Last Tab.
:tabfirst/tablast

Обе таблетки?

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

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

«Вы упускаете чувство, чувство, которое не можете воспроизвести. Перестаньте обманывать себя, потому что дорога лежит как туда, где вы находитесь, так и туда, где вы уже были. ”

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

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

Потому что, если бы редакторы на основе графического интерфейса не имели удобства использования, у нас не было бы различных плагинов, визуальных значков, тематических значков в стиле Material Design, fzf и т. д. для Vim. Vim был бы намного проще, чем наш Терминал. Не было бы Jupytr Notebooks, если бы просто Python REPL был настолько удобен в использовании, что не было бы необходимости в веб-сайте PyPI или Git Kraken. По иронии судьбы, сама концепция Vim использует визуальную математическую парадигму в форме FSM, которая тесно связана с классом графических моделей. Визуальную и математическую идеологии нельзя просто отделить от кода, они идут рука об руку.

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

Заключительные мысли

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

Ресурсы

Прежде чем уйти, не стесняйтесь связаться со мной в Twitter как @agrover112.

Присоединяйтесь к моему списку адресов электронной почты, чтобы получать больше памятных полезных советов!