[Из песочницы] Зачем vi-топор программисту 21-го века
Не помню, когда и при каких именно обстоятельствах, но как-то очень давно я открыл для себя Git. Поначалу я не совсем, конечно, понял его преимуществ перед другими системами контроля версий, но уже порядком к тому времени подустав от TFS, которую на тот момент мы использовали в компании, решил его попробовать.Git очень быстро завоевал мою любовь и с тех пор я даже не представляю себе свою работу без него.
Однажды, играясь и пробуя разные команды, я случайно запустил режим редактора, а Git, как оказалось, по умолчанию использовал Vim, который я до того времени в глаза и не видел. Ну и как обычно происходит первое знакомство с этим редактором? Правильно — с недоумением и перезагрузкой терминала. Банально — выйти из редактора я так и не смог и честно, даже подумал, что редактор тупо глючит. Я даже помню, как-то удивился — как же блин так получилось, что такие умные чуваки, создавшие такую мощную штуку, как Git, могли выбрать такой архаичный, тупой, непонятный и некрасивый (как мне поначалу показалось) редактор?
I’ve been using Vim for about 2 years now, mostly because I can’t figure out how to exit it.
— I Am Devloper (@iamdevloper) 17 февраля 2014
Но потом мне стало любопытно, я начал копаться. Признаюсь честно, путь к преодолению собственной лени и наработанных привычек был непрост и очень долог. Но я ничуть не жалею о потраченном времени и нервах. Сейчас я использую (и использовал) Vim-режим практически везде, где это возможно — WebStorm/RubyMine/PyCharm, Sublime Text, Visual Studio, Atom. Vim-режим у меня активирован в Терминале и даже в Браузере.Да, да, как оказалось, зная Vim-овы команды можно очень эффективно переключаться между вкладками, переходить по ссылкам, листать вниз и вверх, искать текст на странице и многое, многое другое.
Под Chrome существует аж целых три расширения — наиболее популярный Vimium, менее популярный и немного подустаревший Vrome и бурно развивающийся, молодой cVim. Я начинал с первого, потом перешел на Vrome. Дело в том, что Vrome предлагает обалденную фичу — редактирование текста в стороннем редакторе. То есть идешь, к примеру, на StackOverflow, чтобы задать вопрос, переходишь в область текстового поля и… нажатием комбинации клавиш открывается Vim — можно вбивать текст, используя всю его мощь. При сохранении текст автоматически попадает обратно в браузер. Фантастика. К сожалению, Vimium встроенной такой поддержки пока не имеет. Хотя в остальном во многом превосходит Vrome, я недавно снова перешел на Vimium и, как оказалось, многие баги были пофиксены, добавилась функциональность и т.д. Хотя без поддержки внешнего редактора, конечно, приходится страдать. cVim — несмотря на свою молодость, достаточно мощный и быстро развивающийся проект, очень хочется надеется, что автор и участники проект не забросят, как это произошло с Vrome.Я не очень часто использую Firefox, но насколько я знаю, там рулит Vimperator.
Vim — обалденная все таки вещь, единственный недостаток Vim-а — привыкнув раз, привыкаешь на всю жизнь. К примеру, мне теперь не хватает Vim режима в Скайпе, в Ворде, в Slack и т.д. Интересно, что многие веб-сайты внедряют базовую vim-навигацию — gmail, trello, github и т.д.
Если вы хоть раз пробовали Vim и так и смогли заставить себя привыкнуть, вы обязательно должны постараться еще раз. Если вы хотите постичь дзен Vim-а — наберитесь терпения. Запустите и пройдите vimtutor, поиграйтесь в Vim Adventures. Старайтесь не нервничать оттого, что все время приходится вспоминать/искать искомую комбинацию клавиш. Распечатайте шпаргалку. Поначалу вам будет казаться, что вся эта овчинка не стоит выделки и Vim никоим образом не делает вас более продуктивным, а все даже с точностью наоборот. Поверьте мне на слово, понадобятся месяцы чтобы ощутить всю прелесть Vim-а. Через какое-то время вы даже не будете задумываться — пальцы сами будут бегать по клавиатуре, а для непосвященного наблюдателя ваши действия будут выглядеть сущим колдовством. Кто-то даже как-то пошутил — мол любая мало-мальски значимая Vim-ова комбинация сойдет за Fatality в Mortal Kombat.
Ну что, заинтригованы? А теперь давайте поговорим о настоящем редакторе (шутка).
С тех пор, как я в первый раз открыл для себя Vim прошло, много времени, но постепенно мне стали открываться и недостатки Vim-a. Дело в том, что Vim — это редактор. Сделать из него полноценный IDE не скажу что прям невозможно, но чертовски сложно. Да и потом, мы же не только текст редактируем, нам нужен полноценные поиск и замена, intellisense, файловый менеджер, встроенная поддержка VCS, желательно окно терминала, многоязычность и прочее и прочее. Да, у Vim-а куча плагинов, их можно подключать, их можно до бесконечности настраивать и так далее, но в сущности Vim так по большому счету и останется — редактором. В этом плане Sublime даже ничуть не хуже. Я обожаю IDE от JetBrains. Webstorm, к примеру, просто улетная штука. Что плохо? А то, что и в том и в другом поддержка Vim-режима не без нареканий.
Итак, хочется иметь среду с поддержкой Vim режима, но при этом:
с более удобным встроенным языком конфигурирования; с удобным менеджером плагинов и достаточным разнообразием оных; с поддержкой нескольких языков (input and localizations); с удобной навигацией по командам (аля Sublime). И что в итоге мы имеем? А имеем мы Emacs. Да, да, не удивляйтесь.К изучению Emacs меня подтолкнуло праздное любопытство, а еще коллега, который до Emacs лет десять пользовался Vim-ом, ну и знакомый, у которого я утащил к себе конфигурацию для Vim-а (а в последствии и для Emacs-а).
Поначалу злобный Emacs меня к себе совсем не подпускал. Я еще шутил на работе, мол у Emacs-а такого огромное эго, что оно не влезает в мой компьютер. Чтобы попробовать, я скачал голый Emacs, запустил. Посмотрел. Не понравилось. Потом попробовал скачать так называемый Starter Kit — и оно не понравилось. Ну не могу я без Vim режима, хоть тресни. И вот тогда-то я и открыл для себя Evil-mode. И тут я понял, как же все таки был неправ в своей лени и надо было попробовать Emacs раньше.
Я только-только перешел на Emacs и, пожалуй, не стану давать каких либо советов. Скажу только, что я очень быстро осознал насколько у него гибко-настраиваемая среда. Emacs — это не редактор, это скорее конструктор, из которого можно собрать себе IDE, текстовый процессор, органайзер на свой цвет и вкус. К примеру: я подумал, а почему бы мои записки Evernote не вбивать прям в Emacs? Нашел плагин, установил, настроил — пользуюсь. Здорово. Второй пример: мне приходится достаточно часто писать на английском и пользоваться тезаурусом. Тут оказалось под это плагинов аж несколько — пришлось выбирать. Тот, что я выбрал, отображает окно со списком слов-вариантов. Но мне же нужна полная автоматизация; нужно, чтобы при открытии окна с вариантами курсор сам прыгнул в то окно. А потом, после того как я выберу подходящий вариант, мог бы легко заменить им искомое слово и закрыть окно уже за ненадобностью. Оказалось, подобные трюки очень легко спрограммировать. И теперь мне не приходится лезть в интернет за тезаурусом, а поиск и подбор вариантов занимает буквально секунды.
Завершая хочется сказать, что, конечно, можно до бесконечности спорить, какой редактор лучше. Но все же я считаю — настоящий разработчик должен освоить оба. Чего я вам и желаю. И только освоив их вы поймете. зачем современному программисту нужны редакторы почти сорокалетней давности.