Общее

  • :h[elp] keyword - открыть справку для ключевого слова keyword
  • :sav[eas] file - сохранить под названием file
  • :clo[se] - закрыть текущую панель
  • :ter[minal] - открыть окно терминала
  • K - открыть справочное руководство для слова под курсором
Tip Выполните vimtutor в терминале, чтобы изучить первые команды Vim.

Перемещение курсора

  • h - передвинуть курсор влево
  • j - передвинуть курсор вниз
  • k - передвинуть курсор вверх
  • l - передвинуть курсор вправо
  • gj - переместить курсор вниз (многострочный текст)
  • gk - переместить курсор вверх (многострочный текст)
  • H - переместиться к началу экрана
  • M - переместиться к середине экрана
  • L - переместиться к концу экрана
  • w - переместиться вперед на начало слова
  • W - переместиться вперед на начало слова (слово может содержать пунктуацию)
  • e - переместиться вперед на конец слова
  • E - переместиться вперед на конец слова (слово может содержать пунктуацию)
  • b - переместиться назад на начало слова
  • B - переместиться назад на начало слова (слово может содержать пунктуацию)
  • ge - переместиться назад на конец слова
  • gE - переместиться назад на конец слова (слово может содержать пунктуацию)
  • % - перейти к соответствующему парному символу (по умолчанию поддерживаемые пары: '()', '{}', '[]' - используйте :h matchpairs в Vim для получения дополнительной информации)
  • 0 - переместиться на начало строки
  • ^ - переместиться на первый непробельный символ строки
  • $ - переместиться на конец строки
  • g_ - переместиться к последнему непустому символу в строке
  • gg - переместиться на первую строку документа
  • G - переместиться на последнюю строку документа
  • 5gg or 5G - переместить на пятую строку
  • gd - переместиться к локальному объявлению
  • gD - переместиться к глобальному объявлению
  • fx - переместиться к следующему вхождению символа x
  • tx - переместиться перед следующим вхождением символа x
  • Fx - переместиться к предыдущему вхождению символа x
  • Tx - переместиться перед предыдущим вхождением символа x
  • ; - повторить предыдущее перемещение f, t, F или T
  • , - повторить предыдущее перемещение f, t, F или T в обратном порядке
  • } - переместиться к следующему параграфу (или функции/блоку при редактировании кода)
  • { - переместиться к предыдущему параграфу (или функции/блоку при редактировании кода)
  • zz - централизовать курсор на экране
  • zt - position cursor on top of the screen
  • zb - position cursor on bottom of the screen
  • Ctrl + e - переместить экран на одну строку вниз (без перемещения курсора)
  • Ctrl + y - переместить экран на одну строку вверх (без перемещения курсора)
  • Ctrl + b - переместиться назад на целый экран
  • Ctrl + f - переместиться вперед на целый экран
  • Ctrl + d - переместиться вперед на половину экрана
  • Ctrl + u - переместиться назад на половину экрана
Tip Добавьте число перед командой перемещения курсора, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.

Режим вставки - вставка/добавление текста

  • i - вставка перед курсором
  • I - вставка в начало строки
  • a - вставка (добавление) после курсора
  • A - вставка (добавление) в конец строки
  • o - добавление новой строки под текущей
  • O - добавление новой строки над текущей
  • ea - вставка (добавление) после конца слова
  • Ctrl + h - удалить символ перед курсором в режиме вставки
  • Ctrl + w - удалить слово перед курсором в режиме вставки
  • Ctrl + j - перейти на новую строку в режиме вставки
  • Ctrl + t - добавить один отступ строке (переместить вправо) в режиме вставки
  • Ctrl + d - убрать один отступ у строки (переместить влево) в режиме вставки
  • Ctrl + n - вставить (автозаполнить) следующее соответствие перед курсором в режиме вставки
  • Ctrl + p - вставить (автозаполнить) предыдущее соответствие перед курсором в режиме вставки
  • Ctrl + rx - вставить содержимое регистра x
  • Ctrl + ox - временно включить нормальный режим и выполнить команду нормального режима x.
  • Esc or Ctrl + c - выход из режима вставки

Редактирование

  • r - заменить один символ
  • R - заменить несколько символов, до нажатия ESC.
  • J - присоединить нижнюю строку к текущей
  • gJ - присоединить нижнюю строку к текущей без пробела между ними
  • gwip - перекомпоновать азбац
  • g~ - инвертировать регистр в ходе перемещения курсора
  • gu - перевести в верхний регистр в ходе перемещения курсора
  • gU - перевести в нижний регистр в ходе перемещения курсора
  • cc - заменить всю строку
  • c$ or C - заменить до конца строки
  • ciw - изменить (заменить) всё слово
  • cw or ce - заменить до конца слова
  • s - удалить символ и заменить текст
  • S - удалить строку и заменить текст (то же, что cc)
  • xp - переставить две буквы (удалить и вставить)
  • u - отменить
  • U - восстановить (откатить) последнюю изменённую строку
  • Ctrl + r - повторить
  • . - повторить последнюю команду

Выделение текста (визуальный режим)

  • v - включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
  • V - включить построчный режим выделения
  • o - переместиться на другой конец выделенной области
  • Ctrl + v - включить режим выделения блоков
  • O - переместить на другой угол блока
  • aw - выделить слово
  • ab - блок в ()
  • aB - блок в {}
  • at - блок в <> тегах
  • ib - внутренний блок в ()
  • iB - внутренний блок в {}
  • it - внутренний блок в <> тегах
  • Esc or Ctrl + c - выйти из режима выделения текста
Tip Вместо b и B также можно использовать ( и { соответственно.

Визуальные команды

  • > - сместить текст вправо
  • < - сместить текст влево
  • y - скопировать выделенный текст
  • d - удалить выделенный текст
  • ~ - переключить регистр
  • u - перевести выделенный текст в нижний регистр
  • U - перевести выделенный текст в верхний регистр

Регистры

  • :reg[isters] - показать содержимое регистров
  • "xy - поместить содержимое в регистр x
  • "xp - вставить содержимое регистра x
  • "+y - скопировать в системный регистр буфера обмена
  • "+p - вставить из системного регистра буфера обмена
Tip Содержимое регистров сохраняется в ~/.viminfo и восстанавливается при следующем запуске vim.
Tip Специальные регистры:

0 - последнее копирование
" - безымянный регистр: последнее удаление или копирование
% - название текущего файла
# - название альтернативного файла
* - содержимое буфера обмена (первичный X11)
+ - содержимое буфера обмена (буфер обмена X11)
/ - последний поисковый паттерн
: - последняя команда
. - последний вставленный текст
- - последнее небольшое (меньшее, чем строка) удаление
= - регистр, возвращающий значение выражения
_ - регистр чёрной дыры

Метки

  • :marks - список меток
  • ma - установить метку A на текущей позиции
  • `a - переместиться к метке A
  • y`a - скопировать до метки A
  • `0 - переместиться на позицию, на которой Vim в последний раз был закрыт
  • `" - переместиться на позицию, на которой был закрыт в последний раз данный файл
  • `. - переместиться на позицию последнего изменения данного файла
  • `` - переместиться на позицию перед последним переходом
  • :ju[mps] - открыть список переходов
  • Ctrl + i - перейти к более новому переходу в списке переходов
  • Ctrl + o - перейти к более старому переходу в списке переходов
  • :changes - открыть список изменений
  • g, - перейти к более новому изменению в списке изменений
  • g; - перейти к более старому изменению в списке изменений
  • Ctrl + ] - перейти к тегу под курсором
Tip Для перехода к отметке вы можете использовать как знак побочного ударения (`), так и апостроф ('). Использование апострофа переводит к началу (первой непустой) строки, содержащей отметку.

Макросы

  • qa - записать макрос A
  • q - остановить запись макроса
  • @a - выполнить макрос A
  • @@ - выполнить последний макрос

Вырезать и вставить

  • yy - скопировать строку
  • 2yy - скопировать 2 строки
  • yw - скопировать слово
  • yiw - скопировать слово под курсором
  • yaw - скопировать слово под курсором и пространство перед или после него
  • y$ or Y - скопировать до конца строки
  • p - вставить буфер обмена после курсора
  • P - вставить буфер обмена перед курсором
  • gp - вставить буфер обмена после курсора и переместить курсор после вставленного текста
  • gP - вставить буфер обмена перед курсором и переместить курсор после вставленного текста
  • dd - удалить (вырезать) строку
  • 2dd - удалить (вырезать) 2 строки
  • dw - удалить (вырезать) слово
  • diw - удалить (вырезать) слово под курсором
  • daw - удалить (вырезать) слово под курсором и пространство перед или после него
  • :3,5d - delete lines starting from 3 to 5
Tip You can also use the following characters to specify the range:
e.g.

:.,$d - From the current line to the end of the file
:.,1d - From the current line to the beginning of the file
:10,$d - From the 10th line to the beginning of the file

  • :g/{pattern}/d - delete all lines containing pattern
  • :g!/{pattern}/d - delete all lines not containing pattern
  • d$ or D - удалить (вырезать) до конца строки
  • x - удалить (вырезать) символ

Отступы текста

  • >> - добавить один отступ строке (переместить вправо)
  • << - убрать один отступ у строки (переместить влево)
  • >% - добавить один отступ блоку в () или {}
  • <% - de-indent a block with () or {} (cursor on brace)
  • >ib - изменить отступ внутреннему блоку в ()
  • >at - изменить отступ блоку в <> тегах
  • 3== - выровнить отступы 3-х строк
  • =% - выровнить отступы блока в () или {}
  • =iB - выровнить отступы блока в {}
  • gg=G - выровнить оступы всего буфера
  • ]p - вставить и выровнить отступы по строке под курсором

Выход и сохранение

  • :w - сохранить файл, но не выходить
  • :w !sudo tee % - сохранить файл с sudo
  • :wq or :x or ZZ - сохранить файл и выйти
  • :q - выйти (терпит неудачу в случае несохраненных изменений)
  • :q! or ZQ - выйти без сохранения
  • :wqa - записать (сохранить) и выйти во всех вкладках и буферах

Поиск и замена

  • /pattern - поиск шаблона
  • ?pattern - обратный поиск шаблона
  • \vpattern - 'very magic' режим: все не алфавитно-цифровые символы интерпретируются как специальные (экранирование не требуется)
  • n - повторить поиск в том же направлении
  • N - повторить поиск в обратном направлении
  • :%s/old/new/g - заменить все вхождения шаблона в файл на указанное значение
  • :%s/old/new/gc - заменить все вхождения шаблона в файл на указанное значение с подтверждением
  • :noh[lsearch] - отключить подсвечивание результатов поиска

Поиск в нескольких файлах

  • :vim[grep] /pattern/ {`{file}`} - поиск по шаблону в нескольких файлах
e.g. :vim[grep] /foo/ **/*
  • :cn[ext] - переместиться к следующему совпадению
  • :cp[revious] - переместиться к предыдущему совпадению
  • :cope[n] - открыть окно со списком результатов
  • :ccl[ose] - закрыть окно со списком результатов

Вкладки

  • :tabnew or :tabnew {page.words.file} - открыть файл в новой вкладке
  • Ctrl + wT - переместить текущее окно в собственную вкладку
  • gt or :tabn[ext] - переключиться на следующую вкладку
  • gT or :tabp[revious] - переключиться на предыдущую вкладку
  • #gt - переключиться на вкладку с номером #
  • :tabm[ove] # - переместить текущую вкладку на # позицию (нумерация с 0)
  • :tabc[lose] - закрыть текущую вкладку и все её окна
  • :tabo[nly] - закрыть все вкладки, кроме текущей
  • :tabdo command - выполнить command на всех вкладках (к примеру, :tabdo q закрывает все открытые вкладки)

Работа с несколькими файлами

  • :e[dit] file - редактировать файл в новом буфере
  • :bn[ext] - перейти к следующему буферу
  • :bp[revious] - перейти к предыдущему буферу
  • :bd[elete] - удалить буфер (закрыть файл)
  • :b[uffer]# - перейти к буферу по номеру #
  • :b[uffer] file - перейти к буферу по имени файла
  • :ls or :buffers - список всех открытых буферов
  • :sp[lit] file - открыть файл в новом буфере и разделить окно
  • :vs[plit] file - открыть файл в новом буфере и вертикально разделить окно
  • :vert[ical] ba[ll] - развернуть все буферы как вертикальные окна
  • :tab ba[ll] - развернуть все буферы как вкладки
  • Ctrl + ws - разделить окно
  • Ctrl + wv - разделить окно вертикально
  • Ctrl + ww - переключение окон
  • Ctrl + wq - закрыть окно
  • Ctrl + wx - поменять местами текущее окно со следующим
  • Ctrl + w= - сделать все окна одинаковой высоты и ширины
  • Ctrl + wh - переместить курсор в левое окно (вертикально разделение)
  • Ctrl + wl - переместить курсор в правое окно (вертикальное разделение)
  • Ctrl + wj - переместить курсор в окно ниже (горизонтальное разделение)
  • Ctrl + wk - переместить курсор в окно выше (горизонтальное разделение)
  • Ctrl + wH - сделать текущее окно максимальным по высоте и крайним слева (самым левым вертикальным окном)
  • Ctrl + wL - сделать текущее окно максимальным по высоте и крайним справа (самым правым вертикальным окном)
  • Ctrl + wJ - сделать текущее окно максимальным по ширине и крайним снизу (самым нижним горизонтальным окном)
  • Ctrl + wK - сделать текущее окно максимальным по ширине и крайним сверху (самым верхним горизонтальным окном)

Различия файлов

  • zf - вручную определить свёртку в ходе перемещения курсора
  • zd - удалить свёртку под курсором
  • za - переключить состояние свёртки под курсором
  • zo - раскрыть свёртку под курсором
  • zc - свернуть свёртку под курсором
  • zr - раскрыть все свёртки на один уровень
  • zm - свернуть все свёртки на один уровень
  • zi - переключить состояния всех свёрток в буфере
  • ]c - перейти к началу следующего отличия
  • [c - перейти к началу предыдущего отличия
  • do or :diffg[et] - скопировать отличия (из другого буфера)
  • dp or :diffpu[t] - вставить отличия (в другой буфер)
  • :diffthis - сделать текущее окно частью окна сравнения
  • :dif[fupdate] - обновить отличия
  • :diffo[ff] - выключить режим сравнения для текущего окна
Tip Команды для свёрток (например, za) работают на одном уровне вложенности. Чтобы работать на всех уровнях, используйте заглавные буквы (например, zA).
Tip Чтобы увидеть различия файлов, можно напрямую запустить Vim в режиме сравнения, выполнив в терминале vimdiff. Можно даже установить его как git difftool.