vim/nvim cheat sheet

vim/nvim cheat sheet


Общее

: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 - переместиться назад на начало слова (слово может содержать пунктуацию)

ge - jump backwards to the end of a word

gE - jump backwards to the end of a word (words can contain punctuation)

% - move to matching character (default supported pairs: '()', '{}', '[]' - use :h matchpairs in vim for more info)

0 - переместиться на начало строки

^ - переместиться на первый непробельный символ строки

$ - переместиться на конец строки

g_ - переместиться к последнему непустому символу в строке

gg - переместиться на первую строку документа

G - переместиться на последнюю строку документа

5gg or 5G - переместить на пятую строку

gd - move to local declaration

gD - move to global declaration

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

Ctrl + rx - insert the contents of register x

Ctrl + ox - Temporarily enter normal mode to issue one normal-mode command x.

Esc - выход из режима вставки

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

r - заменить один символ

R

 - replace more than one character, until ESC is pressed.

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 or ce - заменить до конца слова

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-blank) of the line holding the mark.

Макросы

qa - записать макрос A

q - остановить запись макроса

@a - run macro a

@@ - выполнить последний макрос

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

yy - скопировать строку

2yy - скопировать 2 строки

yw - скопировать слово

yiw - скопировать слово под курсором

yaw - скопировать слово под курсором и пространство перед или после него

y$ - скопировать до конца строки

p - вставить буфер обмена после курсора

P - вставить буфер обмена перед курсором

dd - удалить (вырезать) строку

2dd - удалить (вырезать) 2 строки

dw - удалить (вырезать) слово

diw - удалить (вырезать) слово под курсором

daw - удалить (вырезать) слово под курсором и пространство перед или после него

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] - перейти к следующему буферу

:bp[revious] - перейти к предыдущему буферу

:bd[elete] - удалить буфер (закрыть файл)

:b[uffer]# - go to a buffer by #

:b[uffer] file - go to a buffer by file

:ls or :buffers - список всех открытых буферов

: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 - переместить курсор в окно выше (горизонтальное разделение)

Ctrl + wH - make current window full height at far left (leftmost vertical window)

Ctrl + wL - make current window full height at far right (rightmost vertical window)

Ctrl + wJ - make current window full width at the very bottom (bottommost horizontal window)

Ctrl + wK - make current window full width at the very top (topmost horizontal window)

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

источник vim.rtorr.com ©

Содержание