Check out one of my other projects 👉 weekend.dev!

Общее

  • :h[elp] keyword - открыть помощь для keyword
  • :sav[eas] file - сохранить как file
  • :clo[se] - закрыть текущую панель
  • :ter[minal] - open a terminal window
  • K - открыть справочное руководство для слова под курсором
Tip Run vimtutor in a terminal to learn the first Vim commands.

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

  • h - передвинуть курсор влево
  • j - передвинуть курсор вниз
  • k - передвинуть курсор вверх
  • l - передвинуть курсор вправо
  • H - переместиться к началу экрана
  • M - переместиться к середине экрана
  • L - переместиться к концу экрана
  • w - переместиться вперед на начало слова
  • W - переместиться вперед на начало слова (слово может содержать пунктуацию)
  • e - переместиться вперед на конец слова
  • E - переместиться вперед на конец слова (слово может содержать пунктуацию)
  • b - переместиться назад на начало слова
  • B - переместиться назад на начало слова (слово может содержать пунктуацию)
  • % - move to matching character (default supported pairs: '()', '{}', '[]' - use :h matchpairs in vim for more info)
  • 0 - переместиться на начало строки
  • ^ - переместиться на первый непробельный символ строки
  • $ - переместиться на конец строки
  • g_ - переместиться к последнему непустому символу в строке
  • gg - переместиться на первую строку документа
  • G - переместиться на последнюю строку документа
  • 5gg or 5G - переместить на пятую строку
  • fx - переместиться к следующему вхождению символа x
  • tx - переместиться перед следующим вхождением символа x
  • Fx - jump to previous occurence of character x
  • Tx - jump to after previous occurence of character x
  • ; - repeat previous f, t, F or T movement
  • , - repeat previous f, t, F or T movement, backwards
  • } - переместиться к следующему параграфу (или функции/блоку при редактировании кода)
  • { - переместиться к предыдущему параграфу (или функции/блоку при редактировании кода)
  • zz - center cursor on screen
  • Ctrl + e - move screen down one line (without moving cursor)
  • Ctrl + y - move screen up one line (without moving cursor)
  • Ctrl + b - переместиться назад на целый экран
  • Ctrl + f - переместиться вперед на целый экран
  • Ctrl + d - переместиться вперед на половину экрана
  • Ctrl + u - переместиться назад на половину экрана
Tip Добавьте число перед командой перемещения курсора для того, чтобы повторить её. Например, 4j перемещает курсор на 4 строки вниз.

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

  • i - вставка перед курсором
  • I - вставка в начало строки
  • a - вставка (добавление) после курсора
  • A - вставка (добавление) в конец строки
  • o - добавление новой строки под текущей
  • O - добавление новой строки над текущей
  • ea - вставка (добавление) после конца слова
  • Ctrl + h - delete the character before the cursor during insert mode
  • Ctrl + w - delete word before the cursor during insert mode
  • Ctrl + j - begin new line during insert mode
  • Ctrl + t - indent (move right) line one shiftwidth during insert mode
  • Ctrl + d - de-indent (move left) line one shiftwidth during insert mode
  • Ctrl + n - insert (auto-complete) next match before the cursor during insert mode
  • Ctrl + p - insert (auto-complete) previous match before the cursor during insert mode
  • Esc - выход из режима вставки

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

  • r - заменить один символ
  • J - присоединить нижнюю строку к текущей
  • gJ - join line below to the current one without space in between
  • gwip - reflow paragraph
  • g~ - switch case up to motion
  • gu - change to lowercase up to motion
  • gU - change to uppercase up to motion
  • cc - заменить всю строку
  • C - change (replace) to the end of the line
  • c$ - заменить до конца строки
  • ciw - change (replace) entire word
  • cw - заменить до конца слова
  • s - удалить символ и заменить текст
  • S - удалить строку и заменить текст (то же что cc)
  • xp - переставить две буквы (удалить и вставить)
  • u - отменить
  • U - restore (undo) last changed line
  • Ctrl + r - повторить
  • . - повторить последнюю команду

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

  • v - включить режим выделения текста, выделить строки, затем выполнить команду (например, y-копирование)
  • V - включить построчный режим выделения
  • o - переместиться на другой конец выделенной области
  • Ctrl + v - включить режим выделения блоков
  • O - переместить на другой угол блока
  • aw - выделить слово
  • ab - блок в ()
  • aB - блок в {}
  • at - a block with <> tags
  • ib - внутренний блок в ()
  • iB - внутренний блок в {}
  • it - inner block with <> tags
  • Esc - выйти из режима выделения текста
Tip Instead of b or B one can also use ( or { respectively.

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

  • > - сместить текст вправо
  • < - сместить текст влево
  • y - скопировать выделенный текст
  • d - удалить выделенный текст
  • ~ - переключить регистр
  • u - change marked text to lowercase
  • U - change marked text to uppercase

Регистры

  • :reg[isters] - показать содержимое регистров
  • "xy - поместить содержимое в регистр x
  • "xp - вставить содержимое регистра x
  • "+y - yank into the system clipboard register
  • "+p - paste from the system clipboard register
Tip Содержимое регистров сохраняется в ~/.viminfo, и будет восстановлено при следующем запуске vim.
Tip Special registers:

0 - last yank
" - unnamed register, last delete or yank
% - current file name
# - alternate file name
* - clipboard contents (X11 primary)
+ - clipboard contents (X11 clipboard)
/ - last search pattern
: - last command-line
. - last inserted text
- - last small (less than a line) delete
= - expression register
_ - black hole register

Метки

  • :marks - список меток
  • ma - установить метку A на текущей позиции
  • `a - переместиться к метке A
  • y`a - скопировать до метки A
  • `0 - go to the position where Vim was previously exited
  • `" - go to the position when last editing this file
  • `. - go to the position of the last change in this file
  • `` - go to the position before the last jump
  • :ju[mps] - list of jumps
  • Ctrl + i - go to newer position in jump list
  • Ctrl + o - go to older position in jump list
  • :changes - list of changes
  • g, - go to newer position in change list
  • g; - go to older position in change list
  • Ctrl + ] - jump to the tag under cursor
Tip To jump to a mark you can either use a backtick (`) or an apostrophe ('). Using an apostrophe jumps to the beginning (first non-black) of the line holding the mark.

Макросы

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

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

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

Indent text

  • >> - indent (move right) line one shiftwidth
  • << - de-indent (move left) line one shiftwidth
  • >% - indent a block with () or {} (cursor on brace)
  • >ib - indent inner block with ()
  • >at - indent a block with <> tags
  • 3== - re-indent 3 lines
  • =% - re-indent a block with () or {} (cursor on brace)
  • =iB - re-indent inner block with {}
  • gg=G - re-indent entire buffer
  • ]p - paste and adjust indent to current line

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

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

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

  • /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] - close the quickfix window

Вкладки

  • :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] or :bn - перейти к следующему буферу
  • :bp[revious] or :bp - перейти к предыдущему буферу
  • :bd[elete] - удалить буфер (закрыть файл)
  • :b# - go to a buffer by #
  • :b file - go to a buffer by file
  • :ls - список всех открытых буферов
  • :sp[lit] file - открыть файл в новом буфере и разделить окно
  • :vs[plit] file - открыть файл в новом буфере и вертикально разделить окно
  • :vert[ical] ba[ll] - edit all buffers as vertical windows
  • :tab ba[ll] - edit all buffers as tabs
  • Ctrl + ws - разделить окно
  • Ctrl + wv - разделить окно вертикально
  • Ctrl + ww - переключение окон
  • Ctrl + wq - закрыть окно
  • Ctrl + wx - exchange current window with next one
  • Ctrl + w= - make all windows equal height & width
  • Ctrl + wh - переместить курсор в левое окно (вертикально разделение)
  • Ctrl + wl - переместить курсор в правое окно (вертикальное разделение)
  • Ctrl + wj - переместить курсор в окно ниже (горизонтальное разделение)
  • Ctrl + wk - переместить курсор в окно выше (горизонтальное разделение)

Diff

  • zf - manually define a fold up to motion
  • zd - delete fold under the cursor
  • za - toggle fold under the cursor
  • zo - open fold under the cursor
  • zc - close fold under the cursor
  • zr - reduce (open) all folds by one level
  • zm - fold more (close) all folds by one level
  • zi - toggle folding functionality
  • ]c - jump to start of next change
  • [c - jump to start of previous change
  • do or :diffg[et] - obtain (get) difference (from other buffer)
  • dp or :diffpu[t] - put difference (to other buffer)
  • :diffthis - make current window part of diff
  • :dif[fupdate] - update differences
  • :diffo[ff] - switch off diff mode for current window
Tip The commands for folding (e.g. za) operate on one level. To operate on all levels, use uppercase letters (e.g. zA).
Tip To view the differences of files, one can directly start Vim in diff mode by running vimdiff in a terminal. One can even set this as git difftool.