Справочники
Шпаргалка Vim
Режимы, движения, текстовые объекты, регистры и макросы — плюс разбор набранной комбинации по частям.
Разбор по частям
Что делает эта комбинация
Vim читает нажатия как язык: [регистр][число]оператор[число]движение.
Удалить слово вперёд, 2 раза.
удаляет область в буфер
Показано 79 из 79 строк.
Режимы
Esc возвращает в обычный режим из любого. Если непонятно, что происходит, — Esc дважды.
i / a
Вставка перед курсором / после курсора.
I / A
Вставка в начало строки / в конец строки.
o / O
Новая строка ниже / выше и вставка.
v / V / Ctrl-v
Выделение: посимвольное, построчное, блоком.
R
Замена: набор затирает символы вместо вставки.
gi
Вернуться туда, где в последний раз выходили из вставки.
: / /
Командная строка / поиск.
Ctrl-o
Одна команда обычного режима, не выходя из вставки.
Движения
Любое движение — это и способ переместиться, и аргумент для оператора: d} удаляет ровно то, что прошёл бы }.
h j k l
Влево, вниз, вверх, вправо.
w / W
В начало следующего слова; W считает словом всё до пробела.
e / ge
В конец слова вперёд / назад.
b / B
В начало предыдущего слова.
0 / ^ / $
В начало строки / к первому непробельному / в конец строки.
f{символ} / F{символ}
К следующему такому символу в строке вперёд / назад.
t{символ} / T{символ}
Вплотную до символа, не наступая на него.
; / ,
Повторить последний поиск по символу вперёд / назад.
{ / }
На абзац назад / вперёд.
gg / G / 42G
В начало файла / в конец / на строку 42.
%
К парной скобке.
H / M / L
К верхней, средней, нижней строке экрана.
Ctrl-d / Ctrl-u
Полэкрана вниз / вверх.
'' / `.
Назад туда, откуда прыгнули / к месту последней правки.
Операторы и правка
d{движение}
Удалить область: dw, d$, d}, dd — вся строка.
c{движение}
Удалить и сразу перейти в режим вставки: cw, ci", cc.
y{движение}
Скопировать (yank): yy — строка, y} — абзац.
p / P
Вставить после курсора / до него.
x / X
Удалить символ под курсором / перед ним.
r{символ} / ~
Заменить один символ / переключить регистр.
>> / <<
Сдвинуть строку вправо / влево; >} — целый абзац.
J / gJ
Склеить со следующей строкой с пробелом / без пробела.
u / Ctrl-r
Отменить / вернуть.
.
Повторить последнюю правку. Самая полезная клавиша в Vim.
gu{движение} / gU{движение}
Нижний / верхний регистр области; guiw — слово целиком.
Ctrl-a / Ctrl-x
Увеличить / уменьшить число под курсором.
=G
Переотбить отступы от курсора до конца файла.
Текстовые объекты
i — «внутри», a — «вместе с обрамлением». Работают из любого места объекта, курсор ставить в начало не нужно.
iw / aw
Слово без пробелов / со следующим пробелом.
is / as
Предложение.
ip / ap
Абзац.
i" / a"
Внутри кавычек / вместе с кавычками. Аналогично i' и i`.
i( / a( / ib
Внутри круглых скобок / вместе со скобками.
i{ / a{ / iB
Внутри фигурных скобок — тело функции целиком.
i[ / a[
Внутри квадратных скобок.
it / at
Внутри HTML-тега / вместе с тегом.
ci"
Заменить содержимое строки в кавычках — самая частая связка.
dap
Удалить абзац целиком.
yi{
Скопировать тело блока.
Поиск и замена
/слово ?слово
Поиск вперёд / назад; n и N — следующее и предыдущее.
* / #
Искать слово под курсором вперёд / назад.
:%s/старое/новое/g
Замена во всём файле, все вхождения в строке.
:%s/старое/новое/gc
То же с подтверждением каждой замены.
:%s/старое/новое/gi
Без учёта регистра.
:10,20s/старое/новое/g
Замена только в строках с 10 по 20; :.,$s — от курсора до конца.
:'<,'>s/старое/новое/g
Замена внутри визуального выделения.
:%s/\s\+$//e
Убрать пробелы в конце строк; e гасит ошибку «не найдено».
:g/шаблон/d
Удалить все строки со шаблоном; :v/шаблон/d — наоборот, оставить только их.
:g/шаблон/normal A;
Выполнить команду обычного режима на каждой подходящей строке.
:noh
Погасить подсветку найденного.
:set ic scs
Игнорировать регистр, но учитывать его, если в запросе есть заглавные.
Регистры и макросы
Регистр — это именованный буфер. "a перед командой означает «работать с регистром a».
"ayy / "ap
Скопировать строку в регистр a и вставить из него.
"Ayy
Заглавная буква регистра — дописать, а не перезаписать.
"+y / "+p
Обмен с системным буфером обмена.
"0p
Вставить последнее скопированное, даже если после этого что-то удаляли.
"_d{движение}
Удалить в «чёрную дыру», не затирая буфер.
:reg
Показать содержимое всех регистров.
qa … q
Записать макрос в регистр a; вторая q останавливает запись.
@a / @@
Выполнить макрос a / повторить последний.
10@a
Выполнить макрос десять раз.
:%normal @a
Прогнать макрос по всем строкам файла.
Ctrl-r a
Вставить регистр a прямо в режиме вставки или в командной строке.
Файлы, окна, выход
:w / :wq / :x
Сохранить / сохранить и выйти.
:q!
Выйти без сохранения.
:wa / :qa!
То же для всех открытых буферов.
:w !sudo tee % >/dev/null
Сохранить файл, открытый без прав root.
:e файл / :e!
Открыть файл / перечитать текущий с диска.
:ls :b2 :bd
Список буферов, переход к буферу, закрыть буфер.
:sp / :vs
Разделить окно горизонтально / вертикально.
Ctrl-w h j k l
Переход между окнами; Ctrl-w = выравнивает размеры.
:set nu rnu
Абсолютная и относительная нумерация строк разом — под неё и заточены счётчики.
ZZ / ZQ
Сохранить и выйти / выйти без сохранения, без двоеточия.