Покоряя редактор Vim: как зайти, выйти и сделать что-то полезное?
Хотите работать с текстом и кодом эффективнее? Тогда покиньте колыбельку VS, Atom (или что там у вас) и ныряйте с головой в редактор Vim.
Vim – это легендарный текстовый редактор, способный на многое, но недружелюбный к новичкам. Его действительно придется покорять, но награда за труды будет достойной. Бросайте свои уютные современные редакторы, мы идем на Vim!
Что такое Vim?
В 1976 году родился отец Vim'а – текстовый редактор Vi. Он использовался для работы в терминалах и имел весьма непривычные методы работы в режиме редактирования текста. Vim (Vi IMproved) – это последнее, самое знаменитое воплощение Vi, его улучшенная, как следует из названия, версия. Он поддерживается любой платформой, какую вы сможете вспомнить, и даже имеет графический интерфейс.
Что за зверь Neovim?
Возможно, вы слышали о Neovim'е. Это современный форк классического Vim'а, отрефакторенный, легко расширяемый. Из коробки он уже не так суров, как его предшественник, с ним вполне можно иметь дело. Подробнее о Neovim – на neovim.io.
Почему Vim?
Вас точно мучает вопрос: зачем возиться с таким древним редактором в 2018? Не спешите делать выводы. Путь Vim совсем не похож на все, что вы видели раньше. Он поднимает вас на качественно новый уровень беглости, превращает в хирурга, виртуозно проводящего сложнейшие операции над кодом.
Текстовый редактор Vim специально создан для суперпроизводительности. Расположение каждой команды продумано до мелочей. Главные клавиши – прямо у вас под пальцами! В каждом режиме редактора собственный набор комбинаций, вам не требуется искривлять пальцы, пытаясь захватить все нужные кнопки разом.
Еще одно достоинство, которое делает Vim лучшим редактором в мире, – это адаптируемость. Его можно идеально настроить "под себя" (или под свою команду).
Vim настолько хорош, что большинство других редакторов сегодня поддерживают какой-нибудь Vim-режим.
Подытожим цитатой из великолепной книги Практический Vim:
В руках эксперта Vim разрывает текст со скоростью мысли.
Пробуем Vim на вкус
Работая с Vim, большую часть времени вы будете проводить в обычном режиме, редактируя и оптимизируя уже написанный текст.
Поставьте пальцы правой руки на hjkl
. Теперь это ваша основная позиция. Эти клавиши перемещают курсор влево-вниз-вверх-вправо соответственно. Также можно перемещаться между целыми словами, используя:
w
(word) – к началу следующего слова;e
(end) – к концу следующего слова;b
– к началу слова;ge
– к концу предыдущего слова.
Пользуясь этим клавишами, можно перейти к нужному месту файла и нанести удар высокой точности:
daw
– удалилось слово (delete a word);das
– удалилось целое предложение (sentence);dap
– уничтожился абзац (paragraph)!
Вместо разрушения, можно заняться улучшением:
caw
,cas
,cap
– изменят слово, предложение или абзац (change);ctx
– заменит все до первого символа x в текущей строке (change till x);с$
– все до конца строки;ci(
- все между символами скобок;ci"
- все между двойными кавычками.
Возьмите простую строку:
const msg = "Привет, vim"
и измените ее f'ci'Wat
const msg = "WAT"
На человеческом языке это означает: найди (find) следующий символ ', а затем замени (change) все внутри символов ' на WAT. <ESC>
выходит из режима вставки в нормальный режим.
Можно скопировать строку командой yy
(от слова yank – vim-жаргон для копирования) и вставить ее ниже командой p
(put).
Оператор yank работает точно так же, как d
(delete) или c
(change). Его можно использовать для копирования слов – yaw
или предложений – yas
. Двойные операторы (yy
, cc
, dd
) действуют на целую строку.
Бессмысленный пример
const msg = "WAT" const msg = "WAT"
Выполним уже знакомую команду f'ci'MAN
:
const msg = 'WAT' const msg = 'MAN'
Разгоняемся: kJ
объединит две линии в одну (k
– подняться, J
– объединить).
const msg = 'WAT' const msg = 'MAN'
И полный восторг: c3w+
.
const msg = 'WAT' + 'MAN'
Все это совершенно бессмысленно, но часть магии Vim мы все-таки увидели.
Для более длинных ходов можно использовать счетчики в формате {число}{действие}
, например:
5j
– спуститься на 5 строк;d2w
– удалить 2 слова;c2s
– изменить 2 предложения.
Есть более масштабные ходы:
H
– перейти к верхней части видимой области в редакторе;gg
– перейти к верху файла;L
иG
– нижняя часть видимой области и низ страницы соответственно;{
и}
– перемещение вперед/назад на целый параграф;%
– перемещение между парными скобками.
Новую строку можно начать после текущей (o
) или перед текущей (O
).
Для поиска по шаблону используется команда /{pattern}
, а n
(следующий) и N
(предыдущий) позволяет перемещаться между найденными фрагментами.
Повторение действий:
.
(точка) повторяет изменения;;
– для действий, начатых сt
,f
,T
,F
;n
– для повтора поиска.
Можно даже записывать наборы команд с помощью макросов.
Столько мощи, а ведь мы практически не вышли за границы нормального режима и даже не покинули учебный файл! А есть еще разделения (splits), вкладки, регулярные выражения, доступ к внешним инструментам, проверка орфографии, подсчет слов, 6 основных режимов и 6 дополнительных с бесконечными возможностями для настройки и расширения.
Путь Vim
Основа Vim – клавиатура. Все важные команды расположены продуманно и максимально эффективно:
- основные движения в центральном ряду под правой рукой –
hjkl
; - повторители
;
и.
один под другим; - мощная команда
f
прямо под левым указательным пальцем; - тут же слева основные операторы:
s
,x
,d
,c
,r
; s
– это синоним дляcl
, аx
– дляdl
;*
и#
используются для поиска текущего слова вперед и назад. Их легко запустить средними пальцами.
Все операторы осмыслены и легко запоминаются, благодаря мнемоническим зацепкам:
c
– значит изменить (change),- изменить букву (change letter) –
cl
, - слово (change a word) –
caw
, ciw
– внутреннее слово (change inner word – без окружающих пробелов),ct.
– изменить все до ближайшей точки (change till .).
Вам не нужно запоминать тайные сочетания клавиш – все команды просто имеют смысл. К тому же их очень легко сочетать, композиция – это еще одна сакральная тайна Vim.
Почему редактор Vim такой суровый?
Перейдем к темной стороне Vim, к крутой кривой обучения:
и к недружелюбности:
Несмотря на то, что эти проблемы несколько преувеличены, они все-таки существуют. Есть по крайней мере 3 вещи, которые этому способствуют:
- Необходимо умение печатать вслепую.
- Управление полностью с клавиатуры.
- Ужасное первое впечатление.
Слепая печать
Без умения печатать вслепую совершать основные действия вы будете трудно и мучительно медленно. Поэтому если вы очень хотите покорить редактор Vim, начните со слепой печати. Вот несколько хороших ресурсов:
Управление с клавиатуры
После работы с обычным редактором, специализирующемся на вставке текста, переход к Vim окажется сложным. Здесь вы не сможете использовать мышь, изучить возможности графического интерфейса или вызвать контекстное меню, не сможете даже набрать текст или просто выйти из программы. Здесь все слишком странно и слишком незнакомо.
Лучший совет – начинайте с основ и постепенно расширяйте словарный запас:
- справка –
:help {любая команда}
или просто:h {любая команда}
; - перемещение –
hjkl
(:h movement
или:h motion
); - перейти в режим вставки текста –
i
(:h insert
); - вернуться в нормальный режим –
<ESC>
(:h mode-switching
); - сохранить файл –
:w
(:h write
); - выйти из редактора –
:q
(:h quit
); - открыть файл –
:e {filepath}
(:h edit
).
Обратите внимание на двоеточие перед большинством команд. Оно вызывает командный режим (ex mode).
Самый простой способ изучить редактор Vim – совместить его с вашим уютным редактором с помощью vim-режима. Так вы не попадете в положение Робинзона Крузо, сохраните все возможности обычного редактора и получите преимущества Vim.
Сложнее всего будет не выучить команды, а запомнить их на уровне инстинктов. Тут дело за практикой. Если вы будете регулярно практиковаться, изучая новые комбинации, то быстро станете vim-мастером. Вот вам несколько полезных ресурсов для практики:
- vimtutor – небольшой встроенный учебник. Просто введите в терминале
vimtutor
(в neovim –:vimtutor
). - "Рогалики" – текстовые 2D RPG, в которых вы перемещаете персонажа с помощью тех же клавиш
hjkl
и учитесь лучше контролировать клавиатуру. - Vim Adventures – увлекательная vim-игра.
Плохое первое впечатление
Последний оплот суровости Vim – ужасное первое впечатление. Вы набираете vim (или mvim для Mac GUI, или gvim для Windows, UNIX GUI) – добро пожаловать:
Вот с этого бледного экрана вы начинаете работу с лучшим в мире редактором. Откройте файл – нет подсветки синтаксиса:
Очень неуютно, на этом моменте многие в ужасе убегают.
У вас может появиться соблазн использовать предварительно настроенную версию Vim. Безусловно, первое впечатление в этом случае будет лучше, но так вы не поймете, как настроен ваш инструмент, упустите самую суть. Это будет просто черный ящик.
Если вы не чувствуете в себе сил покорять редактор Vim, попробуйте что-нибудь из следующего:
- Установите neovim – он проще и приятнее во многих отношениях.
- Пройдите vimtutor.
- Поиграйте с vim-плагином в привычном вам редакторе.
- Настройте редактор Vim под себя – на vim-sensible или vim wiki вы можете найти удобную конфигурацию.
- Подключите нужные плагины (с vim awesome) с помощью менеджера расширений (например, vundle, vim-plug, pathogen или minpac).
- Практикуйтесь.
Вы готовы начать работу с легендарным редактором? А может, вы уже вовсю работаете с ним? Делитесь своим vim-опытом в комментариях.
Полезные ресурсы:
- Вики: Vim, Neovim
- Что вам стоит знать, если вы начали изучение Vim
- 7 привычек эффективного редактирования текстов от создателя Vim
- 5 бесплатных ресурсов по изучению Vim
- Отличные книги Practical Vim, Modern Vim
- Vim: 7 привычек для эффективной работы с текстом
- Vimcasts.org – сборник коротких видео
- Шпаргалка по Vim
Перевод статьи Exploring Vim.