Загальні

  • :h[elp] keyword - відкрити довідку для ключового слова keyword
  • :sav[eas] file - зберегти файл з вказаним іменем
  • :clo[se] - закрити поточну панель
  • :ter[minal] - відкрити термінал
  • K - відкрити довідку (man) для слова під курсором
Tip Запустіть vimtutor в терміналі для вивчення базових команд Vim.

Переміщення курсору

  • h - перемістити курсор ліворуч
  • j - перемістити курсор вниз
  • k - перемістити курсор вгору
  • l - перемістити курсор праворуч
  • gj - перемістити курсор вниз (багаторядковий текст)
  • gk - перемістити курсор вгору (багаторядковий текст)
  • H - переміститись на початок екрану
  • M - переміститись на середину екрану
  • L - переміститись на кінець екрану
  • w - переміститись вперед на початок слова
  • W - переміститись вперед на початок слова (слово може містити пунктуацію)
  • e - переміститись вперед на кінець слова
  • E - переміститись вперед на кінець слова (слово може містити пунктуацію)
  • b - переміститись назад на початок слова
  • B - переміститись назад на початок слова (слово може містити пунктуацію)
  • ge - переміститись назад на кінець слова
  • gE - переміститись назад на кінець слова (слово може містити пунктуацію)
  • % - переміститись до відповідного символу (відповідні пари: '()', '{}', '[]' - використовуйте :h відповідна_пара для детальнішої інформації)
  • 0 - переміститись на початок рядка
  • ^ - переміститись на перший непробільний символ рядка
  • $ - переміститись в кінець рядка
  • g_ - переміститись на останній не пробільний символ рядка
  • gg - переміститись на перший рядок документа
  • G - переміститись на останній рядок документа
  • 5gg or 5G - перемістити на п'ятий рядок
  • gd - переміститись до локального оголошення
  • gD - переміститись до глобального оголошення
  • fx - перемістись до наступного символу x
  • tx - переміститись до наступного символу x
  • Fx - переміститись до попереднього символу x
  • Tx - переміститись до наступного символу, перед яким є символом х
  • ; - повторити попередні 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 - додати відступ (перемістити праворуч) рядок на один <code>shiftwidth</code> в режимі введення тексту
  • Ctrl + d - прибрати відступ (перемістити ліворуч) рядок на один <code>shiftwidth</code> в режимі введення тексту
  • 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 - записати макрос в <kbd>a</kbd>
  • q - Зупинити запис макроса
  • @a - запустити макрос <kbd>a</kbd>
  • @@ - Запустити ще раз останній макрос

Вирізати й вставити

  • 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,1d - 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 - видалити (вирізати) символ

Вирівнювання тексту

  • >> - додати відступ (перемістити вправо) рядок на один <code>shiftwidth</code>
  • << - прибрати відступ (перемістити вліво) рядок на один <code>shiftwidth</code>
  • >% - додати відступ для тексту в середині блока, обмеженого () чи {} (курсор на дужці)
  • <% - de-indent a block with () or {} (cursor on brace)
  • >ib - додати відступ для тексту в середині блока, обмеженого ()
  • >at - додати відступ для блоку в середині тега, обмеженого <>
  • 3== - вирівняти 3 рядки
  • =% - вирівняти блок в середині () чи {} (курсор на дужці)
  • =iB - вирівняти текст між {}
  • gg=G - вирівняти весь буфер
  • ]p - вставити і підігнати відступ для поточного рядка

Вийти й зберегти

  • :w - зберегти файл, але не виходити
  • :w !sudo tee % - зберегти файл, використовуючи <kbd>sudo</kbd>
  • :wq or :x or ZZ - зберегти файл та вийти
  • :q - вийти (не працює у випадку якщо зміни не збережено)
  • :q! or ZQ - вийти та втратити зміни, що незбережені
  • :wqa - зберегти і вийти для всіх вкладинок

Пошук та заміна

  • /pattern - пошук шаблону
  • ?pattern - зворотній пошук шаблону
  • \vpattern - 'дуже чарівний' шаблон - не буквено-цифрові символи інтерпретуються як спеціальні символи регулярного виразу (екранування не потрібно)
  • 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] - закрити вікно зі знайденим (quickfix)

Вкладинки

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

Diff

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