[Перевод] Антипаттерны Vim
Когда вы находитесь в состоянии потока, Vim серьёзно ускоряет редактирование, будь то написание кода, поэзии или прозы. Но поскольку кривая обучения слишком крута для текстового редактора, то очень легко сохранить вредные привычки с тех времён, когда вы только осваивали редактор. Vim настолько ускоряет работу, что искоренить эти привычки особенно трудно, ведь их можно даже не заметить. Но это того стоит. Перечислю некоторые из наиболее распространённых антипаттернов.
Перемещение по одной строчке
Если вам нужно перепрыгнуть больше пары строк, то перемещение по одной строке клавишами j
или k
неэффективно. В Vim существует много способов перемещения по вертикали. Я считаю, что два наиболее полезных — прыжок по параграфам и по экранам. Это зависит от того, как далеко и как точно вам нужно двигаться.
{
— Перейти к началу предыдущего абзаца или блока кода.}
— Перейти в конец следующего абзаца или блока кода.Ctrl+F
— Перейти вперёд на один экран.Ctrl+B
— Перейти назад на один экран.
Если вы точно знаете, куда нужно переместиться, то можно использовать навигацию через поиск: поиск вперёд клавишей /
, а назад — ?
.
Также всегда полезно вернуться на предыдущее место, что достаточно легко сделать двумя кавычками или gi
: возврат к последнему месту, где вы вводили текст. Если хотите, можно даже перемещаться между всеми местами, где вводился текст, с помощью g;
и g,
.
Перемещение по одному символу
Точно также и перемещение по одному символу клавишами h
и l
часто является пустой тратой времени, когда у нас есть t
и f
:
t
— Переместиться вперёд до следующего появления символа.f
— Переместиться вперёд за следующее вхождение символа.T
— Переместиться назад до предыдущего вхождения символа.F
— Переместиться назад за предыдущее вхождение символа.
Перемещение по словам клавишами w
, W
, b
, B
, e
и E
тоже лучше. И здесь полезна навигация с поиском, и не забывайте, что вы можете копировать, удалять и изменять текст вперёд или назад к результату поиска:
y/search
y?search
d/search
d?search
c/search
c?search
Поиск слова под курсором
Не утруждайте себя набором слова или копированием/вставкой, просто нажмите *
или #
. Поразительно, насколько быстрее становится работа, когда освоишь эти горячие клавиши.
Удаление и вставка
Нет необходимости удалять текст с целью его замены, перейдя в режим вставки:
d2wi
Быстрее и аккуратнее использовать изменения клавишу c
:
c2w
Так вся операция становится повторяемой с помощью точки (.
).
Использование клавиш со стрелками
Vim позволяет использовать клавиши со стрелками для перемещения в нормальном режиме и в режиме вставки, но если вы привыкли использовать для навигации hjkl
, то стрелки уже кажутся какими-то неуклюжими, потому что в течение всей сессии Vim пальцы находятся в центре клавиатуры, что удобно для слепой печати. Аналогично и клавиши Home и End: хотя они работают как в большинстве редакторов, но нет особой причины их использовать, когда ближе эквиваленты ^
и $
.
Таким образом, целесообразно отучить себя от клавиш со стрелками, отключив их хотя бы временно:
noremap
noremap
noremap
noremap
Слепая печать центральными клавишами не только даёт преимущество скорости, но и позволяет лучше себя чувствовать, потому что запястья отдыхают перед клавиатурой и не перемещаются слишком далеко, а некоторых людям это даже помогает уберечься от туннельного синдрома.
Перемещение в режиме вставки
Дополнительное преимущество слепого набора в центральной строке в том, что вы избавляетесь от привычки перемещаться в режиме вставки: для этого предназначен нормальный режим. Как только нужно куда-то переместиться, вы переходите в нормальный режим и перемещаетесь гораздо более эффективно. Это также помогает сделать операции вставки более атомарными и, следовательно, более удобными для повтора.
Нажатие Esc
Клавиша Escape на современных клавиатурах намного дальше от центрального ряда, чем на клавиатуре Билла Джоя, когда он разрабатывал vi. Обычно нажатие Escape не требуется: Ctrl+[
намного ближе и удобнее, вы довольно быстро измените свои привычки. Как вариант можно рассмотреть вопрос о сопоставлении в операционной системе на Esc довольно бесполезной клавиши Caps Lock или даже необычных сочетаний, таких как jj
. Хотя это немного радикальное предложение, но хорошо работает для многих людей:
inoremap jj
Перемещение к началу или концу строки, затем вставка
Просто используйте I
и A
. К тому же, они делают действие повторяемым для других строк, где может понадобиться такая же операция.
Вход в режим вставки, затем создание новой строки
Используйте o
и O
, чтобы создать новую строку ниже и выше, соответственно, и одновременно войти в режим вставки на ней.
Вход в режим вставки для удаления текста
Здесь довольно очевидное противоречие. Вместо этого удалите текст, переместившись в него и используя d
с соответствующим движением или текстовым объектом. Опять же, такое действие повторяемо и означает, что вы не удерживаете Backspace. Вообще, если вы удерживаете какую-то клавишу в Vim, вероятно, есть более быстрый способ.
Повтор команд или поисков
Просто введите @:
для команды или n/N для поиска; Vim не забывает последний поиск. Если это была не самая последняя команда или поиск, но она точно есть в истории, введите q:
или q/
, найдите её в списке и нажмите Enter.
Повторные замены
Введите &
для повтора на текущей строке последней замены. Можете повторить её на всех строках, набрав g&
.
Повторный вызов макросов
Просто введите @@
.
На самом деле это всего лишь несколько распространённых способов, чтобы увеличить скорость и общую эффективность работы с редактором без установки плагинов или существенных переназначений клавиш. См. также вики с советами по Vim, там есть несколько других действительно полезных примеров.