[Из песочницы] Как Vim украл моё сердце

Думаю, видно из названия, что сегодня мы будем рассуждать о Vim! Что это такое? Зачем это нужно? Как этим пользоваться?

xvkswxcndy9-y7yo23r5b1jpye8.jpeg


Многие, читавшие мою прошлую стать могли воскликнуть:

rh_omgdrh2frdimhryuro9lfwk4.jpeg

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

v_hcrfx7m_mkmanku4wnj09evzu.gif

Возникает справедливый вопрос: «Зачем в 2018-ом пользоваться старой программой, да ещё и без графического интерфейса?» Ответ прост — он удобен. Соглашусь, так можно сказать абсолютно про любой редактор, но всё же этот случай является весьма необычным.

Начнём с того, что, нет, Vim не старый — ему всего 27 лет. Он является наследником классического редактора Vi. Он лучше адаптирован под современные системы и обладает более широким спектром возможностей. Иными словами, своё название (Vi Improved) полностью оправдывает. Хочу также отметить, что есть ещё более новая реализация тех же идей — neovim.

В чём же разница?

zpth5pfk-0qlrafaatt-drx96qe.png

Если глянуть на Youtube разные видео на эту тему, то там в основном говорят о метафизической составляющей вопроса. То есть о о разнице в идеологиях, путях развития проектов и тому подобное. Для конечного пользователя принципиальных различий нет. Однако два момента можно уточнить: некоторые плагины проще установить в neovim, в довесок к отделению пользовательского интерфейса от самого ядра программы. Про второе сейчас подробнее поясню.

Думаю, среди вас найдутся такие люди (и кошки), которые на предложение перейти на другой редактор всегда отвечают примерно так:

rlneesk3pmlgzxcfnxies-8tnmy.jpeg

Что же, neovim спешит на помощь! Благодаря ему сейчас во многих современных IDE и «программистских блокнотах» есть эмулятор функциональности Vim. Таким образом вы можете продолжать пользоваться своим любимым Sublime Text или CLion со всеми вашими плагинами, заодно заметно увеличив свою производительность в плане написания кода, и начав получать от этого больше удовольствия (об этом позднее). Также это хорошее средство для повышения ЧСВ, ведь «настоящие хакеры пользуются либо Vim, либо Emacs».

«Хорошо, я решил попробовать изучить какой-нибудь винтажный редактор, но почему именно Vim, а не хотя бы тот же Emacs?» Ну, это вопрос неоднозначный. Emacs является более мощным решением, которое может всё (в нём можно даже в змейку играть). Однако, эта его сильная сторона также является его слабостью. Он слишком обширный и комплексный, что выливается в более высокую сложность освоения и требовательность к железу. Последний аргумент может сейчас прозвучать глупо, ибо он тоже является консольным редактором, но в ряде задач (как то удалённое подключение по SSH) этот момент может оказаться критичным.

kolf9c6pm0pqzzu0wgdb67-etds.jpeg
(Пользователи Emacs после этих строк)

Хорошо, мы разобрались в том, что такое Vim, но осталось понять зачем и как им пользоваться.

«Почему Vim так всем понравился, что его добавляют куда только можно и даже куда нельзя?» (Кстати, в Emacs он тоже есть. Мне всё больше кажется, что проще перечислить вещи, которых там нет, но это уже не по теме.) Ответ и на этот вопрос является несложным — его философия.

Нельзя в VIM просто взять и начать печатать текст. Для этого есть отдельный режим — «Insert mode». Вы же при запуске программы попадаете в обычный режим, в котором вам предоставляется возможность набирать команды для редактирования текста и переключаться между разными режимами работы этого редактора. «Но ведь это неудобно! Я хочу просто печатать текст!» Чисто технически, для этой задачи подойдёт и печатная машинка, но я всё же отвечу без сарказма. Если большинство редакторов делает акцент на написании кода, то Vim его смещает на редактирование текста и делает это по-своему.

04toyvgaf--93c5d51pl0judzoi.png
(На самом деле, у этой картинки есть глубокий подтекст. Если найдётся минутка, то почитайте про серию японских РПГ Persona.)

Самое главное, что нужно понять при изучении команд Vim — они по большей части не обособлены. Это, считайте, целый язык, где они делятся на глаголы, существительные и прилагательные (модификаторы). Собственно, несмотря на то, что каждая команда представляет из себя один символ, каждая из них имеет аналог слову в английском языке, а их последовательность можно перевести в полноценное предложение!

w2vtnckt6ioy_3_b9shh-rtvcxq.png

Давайте рассмотрим пару примеров, но сначала держите ещё картинку (на этот раз с чем-то полезным):

ruvlgtkrmr526pirvd-aqaopadw.gif

1). d2w
==> Delete two words.

kgd03umyrpqklhuc3ixjdquvby0.gif

2). AMew
==> Append to the end of the line «Mew» and return to the normal mode.

m_lgz1x-5bqe0rxz9tq9kipjjme.gif

3). f(ci(Pakahontas
==> Find a pair of brackets and change their inner content to «Pakahontas» and return to normal mode.

zj2xdwv8r95xbembstvdjld0_ca.gif

Видите? Абсолютно ничего сложного! Безусловно, такой подход требует привыкания и постоянной практики, так как просто выучить все комбинации нельзя — их надо прочувствовать. Я пишу код в Vim не потому, что он в нём быстрее набирается (я и так печатаю медленно, как вы могли заметить, и вслепую не умею), а потому что он более естественный. Вместо кучи ctrl, shift или alt (команды с ними есть, но их мало) очень понятный и, самое главное, человечный язык редактирования.

ddgzek3jkm6jbmhdhbgu4mokrfs.jpeg
(Неожиданно, не так ли?)

Но перед тем, как мы закончим, хочу вставить несколько комментариев:

I. Несмотря на то, что в Vim можно пользоваться стрелочками и мышкой (второе настраивается в файле »~/.vimrc»), это строго не рекомендуется. В нём есть море более интересных команд для перемещения курсора по тексту (и экрану), только они уже не такие интуитивные, как команды для редактирования и их придётся зубрить.

ublsw0j3qlidijbqks5kuxpac6u.jpeg
(It’s hacking time!)

II. В Vim, как и во многих других редакторах, есть командный режим, который вызывается при нажатии на клавишу ':'. Символ '!' имеет в нём двойственное значение:

а) Если он стоит сразу после ':', то после него может следовать полноценная команда для терминала. Хотя некоторые из них дублируются в качестве команд самого редактора, это может быть полезно, например, для вызова компилятора.

б) Если он стоит после команды Vim, то он её выполнит, не сохраняя изменения в файле. С этим, кстати, связан один баг (или, если хотите, особенность) — если вы что-либо делали с текстом, то, даже если вы вернёте его в первоначальное состояние, редактор не закроется, если вы в нём не сохранитесь или не укажете '!'.

6udw5tu7gvyvwty86hu2oligg-8.png
(Вы уже прочувствовали как Vim заботится о ваших данных?)

III. Разные настройки редактора и плагинов можно изменять в вышеупомянутом »~/.vimrc». Там настроек на любой вкус и цвет, только их в самом файле нет. По умолчанию там пусто. Для того, чтобы найти нужные вам параметры, воспользуйтесь командой »: help». Можете после неё добавить имя конкретного компонента или плагина, чтобы сразу перейти к интересующей вас информации. Но, конечно, интернет в этом плане поудобнее будет.

csn2djxvu1_e_tjr9-ko2kwjiri.jpeg

IV. Есть несколько команд в Vim (например 'q'), которые рассчитаны на определение (в »~/.vimrc») пользователем. Однако, если попробовать задать им значение напрямую, то срабатывать они будут с задержкой, так как они ожидают вторую команду после себя (именно их и стоит определять). Если вам нужна именно однокнопочная команда, я вам рекомендую использовать 's', т.к. её функционал практически от 'c' не отличается. «Substitute» можно заменить, так сказать.

wzp3wkmaym_3updxknqpejuvyym.png

V. Команда '.' обладает в это редакторе невероятной мощью. Она умеет повторять предыдущую команду (или целое предложение из них). В принципе, если вы не хотите записывать макрос, то она является прекрасным средством для заполнения кода «чебуреками»:

9wlbbp7tnt1a8sylzlrvxc1rfma.gif

VI. Мне Vim чем-то напоминает старые 48-и килобайтные компьютеры ZX Spectrum. В них тоже были однокнопочные команды, но они были именно для языка программирования Basic. Таким образом разработчики попытались сократить необходимое для работы программы количество оперативной памяти.

-jcwty6queq2orgha2e4ud6jkdc.jpeg

В качестве обучающего материала, рекомендую программу vimtutor. Чисто технически, она просто открывает в Vim файлик с кратким туториалом, но такой подход позволяет практиковаться параллельно с изучением теоретической части. А дальше практика, практика и, ещё раз, практика!

Ну вот, собственно, всё, что мне хотелось о Vim сказать. Честно говоря, я нахожусь в полном восторге от этого редактора. Его философия очень заразительна и похожа на систему Unix в целом (всё просто, понятно и логично, но требует привыкания и запоминания). Поэтому если вы ищете себе хороший текстовый редактор или желаете получить редактирования текста новый опыт, то лучше места вы не найдёте.

Счастья вам, здоровья, и чтобы KDE не падали!

Источники
1) По теме:
а) Собственно, vimtutor
б) Картинка с клавиатурой была взята с сайта viemu
в) Также мною был прочитан викиучебник на эту тему
2) Не по теме:
а) Про серию Persona на Youtube есть множество видео с их подробным анализом. Наверное, наибольшую ценность представляют ролики с какала Filinov’s Place, но автор пока остановился на второй второй части (это не описка).
б) Про Spectrum недавно записал хорошее видео Дмитрий Моисеев
в) Автор рисунка с моей аватарки — Fluff-Kevlar

© Habrahabr.ru