Общее

  • :help keyword - открыть помощь по ключевому слову
  • :o file - открыть file
  • :sav file - сохранить весь текщий буфер как file
  • :close - закрыть текущую панель
  • K - открыть справочное руководство для слова под курсором

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

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

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

  • i - вставка перед курсором
  • I - вставка в начало строки
  • a - вставка (добавление) после курсора
  • A - вставка (добавление) в конец строки
  • o - добавление новой строки под текущей
  • O - добавление новой строки над текущей
  • ea - вставка (добавление) после конца слова
  • Esc - выход из режима вставки

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

  • r - заменить один символ
  • J - присоединить нижнюю строку к текущей
  • cc - заменить всю строку
  • cw - заменить всё текущее слово
  • c$ - заменить до конца строки
  • s - удалить символ и заменить текст
  • S - удалить строку и заменить текст (то же что cc)
  • xp - переставить две буквы (удалить и вставить)
  • u - отменить
  • Ctrl + r - применить последнее отменённое изменение
  • . - повторить последнюю команду

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

  • v - включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
  • V - включить построчный режим выделения
  • o - переместиться на другой конец выделенной области
  • Ctrl + v - включить режим выделения блоков
  • O - переместить на другой угол блока
  • aw - выделить слово
  • ab - блок в ()
  • aB - блок в {}
  • ib - внутренний блок в ()
  • iB - внутренний блок в {}
  • Esc - выйти из режима выделения текста

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

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

Регистры

  • :reg - показать содержимое регистров
  • "xy - поместить содержимое в регистр x
  • "xp - вставить содержимое регистра x
Совет: Содержимое регистров сохраняется в ~/.viminfo, и будет восстановлено при следующем запуске vim.
Совет: В нулевом регистре всегда хранится содержимое последней команды копирования.

Метки

  • :marks - список меток
  • ma - установить метку A на текущей позиции
  • `a - переместиться к метке A
  • y`a - скопировать до метки A

Макросы

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

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

  • yy - скопировать строку
  • 2yy - скопировать 2 строки
  • yw - скопировать слово
  • y$ - скопировать до конца строки
  • p - вставить буфер обмена после курсора
  • P - вставить буфер обмена перед курсором
  • dd - удалить (вырезать) строку
  • 2dd - удалить (вырезать) 2 строки
  • dw - удалить (вырезать) слово
  • D - удалить (вырезать) до конца строки
  • d$ - удалить (вырезать) до конца строки
  • x - удалить (вырезать) символ

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

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

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

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

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

  • :vimgrep /pattern/ {file} - поиск по шаблону в нескольких файлах
Например: :vimgrep /foo/ **/*
  • :cn - переместиться к следующему совпадению
  • :cp - переместиться к предыдущему совпадению
  • :copen - открыть окно со списком результатов

Сворачивание

  • zf#j - создает свертку от текущей позиции до # строк вниз
  • zf/подстрока - создает свертку от текущей позиции и до первой найденной подстроки
  • v/V и zf - выделение блока и создание свертки
  • Команды для управления:

  • zc - свернуть блок
  • zo - развернуть блок
  • zM - закрыть все блоки
  • zR - открыть все блоки
  • za - инвертирование (если открыто – закрыть, если закрыто – открыть)
  • zj - переход к следующей свертке
  • zk - переход к предыдущей свертке
  • zd - удалить свертку под курсором
  • zD - удалить все свертки
  • [z - перейти к началу текущей свертки
  • ]z - перейти к концу текущей свертки
  • После закрытия Vim все свертки забываются, для сохранения сверток в открытом файле используется команда :mkview, для загрузки - :loadview (подробнее).

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

  • :e file - редактировать файл в новом буфере
  • :bnext либо :bn - перейти к следующему буферу
  • :bprev либо :bp - перейти к предыдущему буферу
  • :bd - удалить буфер (закрыть файл)
  • :ls - список всех открытых буферов
  • :sp file - открыть файл в новом буфере и разделить окно
  • :vsp file - открыть файл в новом буфере и вертикально разделить окно
  • Ctrl + ws - разделить окно
  • Ctrl + ww - переключение окон
  • Ctrl + wq - закрыть окно
  • Ctrl + wv - разделить окно вертикально
  • Ctrl + wh - переместить курсор в левое окно (вертикально разделение)
  • Ctrl + wl - переместить курсор в правое окно (вертикальное разделение)
  • Ctrl + wj - переместить курсор в окно ниже (горизонтальное разделение)
  • Ctrl + wk - переместить курсор в окно выше (горизонтальное разделение)

Вкладки

  • :tabnew либо :tabnew file - открыть файл в новой вкладке
  • Ctrl + wT - переместить текущее окно в собственную вкладку
  • gt либо :tabnext либо :tabn - переключиться на следующую вкладку
  • gT либо :tabprev либо :tabp - переключиться на предыдущую вкладку
  • #gt - переключить на вкладку номер #
  • :tabmove # - переместить текущую вкладку на # позицию (нумерация с 0)
  • :tabclose либо :tabc - закрыть текущую вкладку и все её окна
  • :tabonly либо :tabo - закрыть все вкладки кроме текущей
  • :tabdo command - выполнить command на всех вкладках (к примеру :tabdo q - закрывает все открытые вкладки)