Впервые я столкнулся с vim на курсе системного администратора Linux, который посещал некоторое время назад.

Тогда я мало что знал о Linux. Просто это звучало очень красиво.

Во время курса лектор часто вводил команду из трех слов vim и что-то редактировал.

«Ого, круто выглядит», — подумал я!

Итак, решив выглядеть круто, я вернулся домой, открыл терминал, набрал волшебные слова и вуаля! — Я был внутри вима.

Итак, с большим желанием написать свой первый Hello World txt файл в vim, я начал нажимать клавиши на клавиатуре. И ничего не происходило.

Какие-то странные гудки начали появляться из ниоткуда, и я почувствовал себя совершенно расстроенным!

Итак, моя цель быстро сместилась с ввода чего-либо на выход из vim. Да, вы, наверное, знаете, что дальше.

Неистовый удар по ключу заставил меня сделать все возможное, чтобы выйти из vim. Наконец, после неудачного первого столкновения с редактором, я был так благодарен за то, что в правом верхнем углу моего эмулятора терминала была клавиша X.

Теперь эта история должна показаться довольно знакомой, если вы когда-нибудь пробовали использовать vim. Что ж, в конце концов вы научитесь выходить из него и научитесь вводить символы.

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

В настоящее время vim является самым популярным текстовым редактором. Даже некоторые пользователи Windows, как правило, используют его, хотя это и собственная утилита Unix.

Но в чем смысл? Существует так много IDE. Зачем кому-то отравлять свою жизнь бесконечным разочарованием в vim, когда он может просто установить первую Javascript IDE, которую предлагает Google.

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

Самым большим из них является пользовательский интерфейс. Однако суть данной статьи не в этом. На эту тему можно найти множество статей, и, возможно, я напишу одну в будущем.

Сегодня мы рассмотрим гораздо менее заметные достоинства редактора vim.

Лечение болезни IDE

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

Эти вещи незаменимы, особенно для больших проектов. Но они также могут сильно подкосить навыки программистов, которые никогда ничем другим не пользовались. Причина в том, что, используя такие утилиты, вы становитесь неряшливым в своем письме, потому что вызов этой функции находится в одной вкладке от автодополнения. Кроме того, вы можете быть удивлены тем, какие пробелы в ваших знаниях образовались из-за этих инструментов.

Я такой пример. Было два случая, когда я был поражен своими недостатками из-за болезни IDE.

Однажды я был ассистентом на курсе программирования, и один парень попросил меня помочь на одной из первых лекций курса по основам программирования. Он создал новый шаблон VS с программой Hello World C#, но он испортил исходный код C#, и он не компилировался.

Итак, он просил помощи, чтобы исправить это. Я пытался это сделать, но потом был поражен тем, что даже я не знал, как написать простую программу C# Hello World, не полагаясь на стандартный шаблон. В конце концов, я сказал ему удалить проект и создать новый, чтобы VS создал для него шаблон Hello World.

Это стало для меня большой неожиданностью. Я так привык к стандартному шаблону Visual Studio C#, что не смог написать его самостоятельно.

Другой такой случай был, когда я пытался написать цикл for без использования автозавершения, когда я впервые попробовал vim. У меня не получилось. Я не знал, что и куда следует в объявлении цикла, потому что я всегда использовал автодополнение для написания цикла for за себя.

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

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

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

Это не значит, что я не использую автодополнение и шаблоны в своих проектах. Я использую их даже с vim (когда устанавливаю некоторые плагины). Это отличные инструменты, которые значительно повышают производительность. Но я считаю, что нужно потратить некоторое время на создание проектов без этих утилит, чтобы почувствовать суровый опыт написания всего кода самостоятельно.

Это определенно сделает вас лучшим разработчиком. Более того, многие компании используют интервью на доске для проверки своих кандидатов. Если вы не можете написать программу hello world без автодополнения, все ваши знания алгоритмов не помогут вам на доске.

Удаление слоев абстракции

При использовании IDE все делается одним щелчком мыши. Вы можете скомпилировать, связать и запустить свой проект, нажав Ctrl-F5.

На самом деле это три разные команды.

Время от времени вы можете заметить полосу загрузки в нижней части вашей IDE с сообщением о состоянии Indexing.

Вы знаете, что это такое?
Почему это делается?

А знаете ли вы, что для сборки вашего проекта среда IDE использует файл конфигурации, в котором указано, как отдельные файлы должны компилироваться, связываться, как запускать тесты и т. д.?

Точное применение файла конфигурации, конечно, зависит от проекта, но можно настроить все эти свойства.

Если вы не используете IDE, вы должны написать этот файл конфигурации самостоятельно или сгенерировать его явно (Makefiles являются примером этого в проектах C/C++).

А при использовании IDE эти детали скрыты, что, конечно, экономит время, но снова оставляет вас с недостатком знаний. Кто-то может сказать, что вам не нужны эти знания, если вы не сталкиваетесь с ними в своей повседневной работе.

Автомеханикам может сойти с рук незнание того, как работает двигатель, если они только заменяют автомобильные детали в своей работе. Делает ли это их мастерами своего дела?

Но при использовании vim и терминала все эти тонкости не скрыты от вас, и вы должны делать их явно. Это требует больше времени для ученика, но позволяет изучить возможности вашей системы.

Например, знаете ли вы, что существуют параметры компилятора, отличные от параметров вашей IDE по умолчанию?

Другое дело, что использование этого подхода делает ваш проект более переносимым, поскольку вы используете универсальные инструменты, а не специфичные для IDE. Одна проблема, с которой я столкнулся в своем опыте, заключалась в очень старом проекте, который необходимо было перенести в другую IDE.

Мне пришлось углубиться в специфические файлы конфигурации VS, чтобы перепроектировать систему сборки моего проекта. Например, используя Makefile, вы можете просто импортировать проект Makefile в любую современную IDE, и ваш проект будет перенесен из коробки.

Океан IDE

Для C# у вас есть Visual Studio. Для Java есть Eclipse и IntelliJ. У Python есть PyCharm. И есть блоки кода C++.

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

Так почему это проблема?

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

Это означает, что ваша производительность не будет такой высокой.

Кроме того, запуск IDE на вашем ноутбуке затруднен. У меня были случаи, когда CLion был открыт для проекта C, IntelliJ для Java и PyCharm для Python.

Если у вас есть старый ноутбук, как у меня, то это не будет приятным занятием.

Но даже в этом случае меня беспокоит необходимость использовать разные инструменты для разных языков. Каждый инструмент имеет свои тонкости и ярлыки.

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

Используя vim, у вас есть один редактор, чтобы управлять ими всеми. И у вас одинаковые сочетания клавиш и привязки клавиш на разных языках.

Однако использование vim может быть утомительным в некоторых проектах. Например, проекты C# хорошо сочетаются с Visual Studio, и вам будет нелегко, если вы попытаетесь заменить vim на VS. Однако вместо этого вы можете использовать плагин Visual Studio для эмуляции vim внутри VS. Таким образом, вы можете иметь свои любимые ярлыки в предпочитаемой вами среде IDE.

Аналогичный плагин доступен и для других основных IDE.

vim тоже может придумать

Использование barebone-комплектов vim полезно, как указано в разделе «Лечение болезни IDE». Но для больших проектов я предпочитаю использовать плагины для соответствия поведению, подобному IDE, просто потому, что навигация по кодовой базе может быть намного проще.

Это скриншот моей пользовательской настройки vim:

У него много замечательных функций, и с его помощью я смог полностью заменить CLion довольно большой базой кода C.

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

Но если вы хотите иметь vim, похожий на IDE, вы можете клонировать мой репозиторий dotfiles и запустить скрипт install.sh. Он настроит точную конфигурацию vim, которую я использую сейчас.

Обратите внимание, что там есть некоторые конфигурации, не связанные с vim, но вы можете легко извлечь соответствующие вещи. Я оставил комментарии, объясняющие, что делает каждая часть скрипта.

Вывод

Помимо прекрасного пользовательского интерфейса vim, есть и другие преимущества его использования хотя бы на некоторое время. Если вы слишком привыкли к шаблонам кода и автодополнению вашей IDE, пришло время попробовать vim. Имейте в виду, что болезнь IDE нельзя воспринимать легкомысленно.

Кроме того, если вы хотите заглянуть за абстракцию, которую предоставляет вам IDE, пришло время открыть терминал и создать проект с использованием vim с нуля. Вам может не понравиться редактор, но знания, которые вы получите, бесценны.

И если вам надоело использовать 5 разных IDE для выполнения своей работы, vim также может быть правильным вариантом. Он предоставляет вам единый набор инструментов, переносимых для разных проектов.

И так, чего же ты ждешь?

sudo apt install vim и начните свое путешествие с этим замечательным редактором.

Как только вы это сделаете, нравится вам редактор или нет, это сделает вас лучшим разработчиком.

Связанный

Первоначально опубликовано на pmihaylov.com 7 апреля 2018 г.