Справка по Vim
Ниже представлена краткая выжимка по основным командам текстового редактора Vim.
Содержание:
- Режимы Vim
- Перемещение по тексту (Обычный режим)
- Маркеры (Метки)
- Выделение текста (Визуальный режим)
- Операции с текстом (Обычный и Визуальный режимы)
- Поиск и Замена
- Регистры
- Макросы
- Работа с файлами
- Настройка Vim
- Разное
- Регулярные выражения: POSIX классы и Специальные символы
- Работа с окнами (Split Windows)
Режимы Vim
EscилиCtrl + [Выйти из текущего режима в Обычный режим (Normal mode).iВойти в режим Вставки (Insert mode) перед курсором.I(Shift + i) Войти в режим Вставки в начале текущей строки.aВойти в режим Вставки после курсора.A(Shift + a) Войти в режим Вставки в конце текущей строки.oВставить новую строку ниже и перейти в режим вставки.O(Shift + o) Вставить новую строку выше и перейти в режим вставки.R(Shift + r) Войти в режим Замены (Replace mode).
Перемещение по тексту (Обычный режим)
h,j,k,lВлево, вниз, вверх, вправо.w/WПереход к началу следующего слова (W игнорирует знаки препинания).e/EПереход к концу следующего слова (E игнорирует знаки препинания).b/BПереход к началу предыдущего слова (B игнорирует знаки препинания).$Переход в конец текущей строки.^Переход к первому непробельному символу в текущей строке.0Переход к самому началу текущей строки.GПереход к последней строке файла.ggПереход к первой строке файла.Ctrl + OВернуть курсор назад.Ctrl + IКурсор вперед.Double 'Курсор вперед/назад.[номер]GПереход конкретному номеру строки (например,123G).%Переход соответствующей скобкеад ((),{},[]).Ctrl + fПрокрутка вперёд на один экран.Ctrl + bПрокрутка назад на один экран.Ctrl + dПрокрутка вниз на пол-экрана.Ctrl + uПрокрутка вверх на пол-экрана.Ctrl + eПрокручивает окно (экран) вниз на одну строку, не перемещая курсор (если это возможно).Ctrl + yПрокручивает окно (экран) вверх на одну строку, не перемещая курсор.Ctrl + dПрокручивает окно (экран) вниз на пол-экрана. Курсор перемещается.Ctrl + uПрокручивает окно (экран) вверх на пол-экрана. Курсор перемещается.Ctrl + fПрокручивает окно (экран) вниз на целый экран (Forward). Курсор перемещается.Ctrl + bПрокручивает окно (экран) вверх на целый экран (Backward). Курсор перемещается.HПереместить курсор на верхнюю строку экрана.MПереместить среднюю строку экранаола<char>.LПереместить нижнююрстрокуаэкранаола<char>.f<char>Перейти вперёд до символа<char>.F<char>Перейти назад до символа<char>.t<char>Перейти вперёд до символа<char>, остановившись перед ним.T<char>Перейти назад до символа<char>, остановившись после него.;/,Переход к следующему/предыдущему.
Маркеры (Метки)
m[символ]Установить маркер[символ](a-zдля файла,A-Zдля глобально).`[символ]Перейти к точной позиции маркера.'[символ]Перейти к началу строки маркера.d'[символ]Операция от текущей строки до строки маркера.d`[символ]Операция от текущей позиции до точной позиции маркера.c'[символ]Изменить от текущей строки до строки маркера.y`[символ]Копировать от текущей позиции до точной позиции маркера.:marksПоказать список всех текущих маркеров.:marks abПоказать список маркеровaиb.'a,'bs/test/foo/gНайти и заменитьtestнаfooмежду маркерамиaиb.
Использование с операциями:
Управление и использование в диапазонах:
Выделение текста (Визуальный режим)
-
Начните выделение, выбрав режим, затем перемещайте курсор.
vСимвольное выделение (— VISUAL —).V (Shift + v)Построчное выделение (— VISUAL LINE —).Ctrl + vБлочное выделение (— VISUAL BLOCK —).gvПовторное выделение последнего выделенного блока.
Операции с текстом (Обычный и Визуальный режимы)
-
Команды могут применяться к выделенному тексту или к «текстовым объектам» (например,
yКопировать (yank).yyКопировать текущую строку.ywКопировать слово под курсором.y$Копировать до конца строки.yapКопировать весь параграф.yiwКопировать внутреннюю часть слова.dВырезать (delete).ddВырезать текущую строку.dwВырезать слово под курсором.d$Вырезать до конца строки.xУдалить символ под курсором.XУдалить символ перед курсором.cИзменить (change). Удаляет текст и переходит в режим вставки.ccИзменить текущую строку.cwИзменить слово под курсором.ciwИзменить внутреннюю часть слова.pВставить (put) содержимое буфера после курсора/строки.PВставить (put) содержимое буфера до курсора/строки.uОтменить последнее изменение.Ctrl + rПовторить отмененное изменение (redo).. (точка)Повторить последнее изменение.>Увеличить отступ.>>Увеличить отступ текущей строки.<Уменьшить отступ.<<Уменьшить отступ текущей строки.J(Shift + j) Объединить текущую строку со следующей.- Модификаторы
i(inner) иa(around/all) с текстовыми объектами: эти модификаторы используются для точного определения части текста, над которой выполняется операция (y,d,c,v). Курсор должен находиться внутри или на границе текстового объекта. i(inner) — «внутренняя часть» Относится к содержимому внутри ограничителей или к самому слову/блоку, исключая сами ограничители и окружающие пробелы.iwВнутреннее слово (без пробелов).diwУдалить слово под курсором.ciwИзменить слово под курсором (удалить и перейти в режим вставки).yiwСкопировать слово под курсором.iWВнутреннее БОЛЬШОЕ слово (разделенное пробелами).i(/i)Внутреннее содержимое круглых скобок (без самих скобок).di(Удалить содержимое внутри().i[/i]Внутреннее содержимое квадратных скобок (без самих скобок).i{/i}/ibВнутреннее содержимое фигурных скобок (без самих скобок).i</i>/itВнутреннее содержимое угловых скобок / HTML/XML тегов (без самих тегов).i"Внутреннее содержимое двойных кавычек (без самих кавычек).i'Внутреннее содержимое одинарных кавычек (без самих кавычек).i`Внутреннее содержимое обратных кавычек (без самих кавычек).ipВнутренний параграф (без пустых строк-разделителей).isВнутреннее предложение (без окружающих пробелов/знаков препинания).a(around/all) — «вокруг» / «вместе с» Относится к содержимому вместе с его ограничителями и окружающими пробелами.awСлово (включая один окружающий пробел).dawУдалить слово и окружающий пробел.cawИзменить слово и окружающий пробел.aWБОЛЬШОЕ слово (включая окружающие пробелы).a(/a)Содержимое круглых скобок вместе со скобками.da(Удалить содержимое()вместе со скобками.a[/a]Содержимое квадратных скобок вместе со скобками.a{/a}/aBСодержимое фигурных скобок вместе со скобками.a</a>/atСодержимое угловых скобок / тегов вместе с тегами.a"Содержимое двойных кавычек вместе с кавычками.a'Содержимое одинарных кавычек вместе с кавычками.a`Содержимое обратных кавычек вместе с кавычками.apПараграф целиком (включая окружающие пустые строки).asПредложение целиком (включая окружающие пробелы/знаки препинания).
yiw — yank inner word).
Поиск и Замена
/шаблонПоиск вперёд по шаблону.?шаблонПоиск назад по шаблону.nПерейти к следующему совпадению.N(Shift + n) Перейти к предыдущему совпадению.*Поиск следующего вхождения слова под курсором.#Поиск предыдущего вхождения слова под курсором.gnВыделяет следующее вхождение последнего найденного шаблона и переводит в визуальный режим.gNТо же, что gn, но в обратном направлении.- Вставка в режиме поиска (
Ctrl + r + регистр): "Содержимое безымянного регистра (скопированное/вырезанное внутри Vim).+Содержимое системного буфера обмена (Ctrl+Cизвне Vim).*Содержимое буфера выделения X11 (выделение мышью в Linux).- Замена текста (
:s): :[диапазон]s/шаблон/замена/[флаги]Общий синтаксис замены.%По всему файлу.gЗаменить все вхождения в строке.cЗапросить подтверждение для каждой замены.iИгнорировать регистр.[диапазон](Range)- Без диапазона:
:s/old/new/Заменитьoldнаnewтолько в текущей строке (только первое вхождение).:s/old/new/gЗаменитьoldнаnewв текущей строке (все вхождения).- Конкретная строка:
:10s/old/new/Заменить на строке 10.- Диапазон строк:
:10,20s/old/new/Заменить с строки 10 по строку 20.:.,$s/old/new/Заменить от текущей строки (.) до конца файла ($).:1,$s/old/new/Заменить от первой строки (1) до конца файла ($). То же самое, что и%s/old/new/.:%s/old/new/Самый частый способ замены по всему файлу.%— это сокращение для1,$.- Относительный диапазон:
:+5s/old/new/Заменить на 5 строк ниже текущей.:-3,+5s/old/new/Заменить с 3 строк выше текущей до 5 строк ниже текущей.- Визуальное выделение:
- Когда вы выделяете текст в визуальном режиме (
v,V,Ctrl+v) и затем нажимаете:, Vim автоматически вставляет диапазон'<,'>, который означает «от начала выделения до конца выделения». :'<,'>s/old/new/Заменить только в выделенном блоке текста.- Поиск как диапазон:
:?,/old/s/old/new/Заменить от предыдущего вхождения ? до следующего вхождения /old.[шаблон](Pattern / Regular Expression)- Простая строка:
/word/ - Спецсимволы регулярных выражений:
.Любой один символ (кроме новой строки).*Ноль или более вхождений предыдущего символа/группы.\+Одно или более вхождений предыдущего символа/группы.\?Ноль или одно вхождение предыдущего символа/группы.^Начало строки.$Конец строки.\<Начало слова.\>Конец слова.\sПробельный символ.\SНепробельный символ.\dЦифра.\D: Не цифра.\wСимвол слова ([a-zA-Z0-9_]).\W: Не символ слова.\[...]Набор символов (например,[abc],[0-9]).\(...\)Захватывающая группа (Capturing Group). Содержимое этой группы можно использовать в строке замены с помощью обратных ссылок (\1,\2и т.д.).|: Или (логическое ИЛИ). Пример:foo\|barнайдетfooилиbar.[замена](Replacement String)&Вставляет все найденное совпадение.- Пример:
:%s/foo/(&)/gзаменитfooна(foo). \1,\2, …: Вставляют содержимое захватывающих групп из шаблона поиска.- Пример:
:%s/\(foo\)\(bar\)/\2\1/gзаменитfoobarнаbarfoo. \uПреобразует следующий символ в верхний регистр.\UПреобразует все последующие символы в верхний регистр до конца замены или до\E.\lПреобразует следующий символ в нижний регистр.\LПреобразует все последующие символы в нижний регистр до конца замены или до\E.\EЗавершает эффект\Uили\L.~Вставляет строку замены из предыдущей команды:s.\rВставляет перевод строки. Это позволяет вставлять многострочный текст.\nВставляет null-символ.[флаги](Flags)g(global):- Заменяет все вхождения шаблона в каждой строке диапазона. Без этого флага будет заменено только первое вхождение на каждой строке.
- Самый часто используемый флаг.
c(confirm):- Запрашивает подтверждение для каждой замены. Vim будет подсвечивать совпадение и ждать вашей реакции:
yзаменить.nне заменять.aзаменить все оставшиеся без запроса.qвыйти (отменить оставшиеся замены).lзаменить и выйти.Ctrl+eпрокрутить экран вверх.Ctrl+yпрокрутить экран вниз.i(ignorecase):- Игнорировать регистр при поиске шаблона.
- Пример:
:s/word/new/giзаменитword,Word,WORDи т.д. I(noignorecase): Не игнорировать регистр при поиске шаблона, даже если set ignorecase включен глобально.n(noprint): Не выводить строку после замены. Вместо этого выводит количество совпадений. Полезно для подсчета вхождений.p(print): Вывести (напечатать) строку после первой замены. (Это поведение по умолчанию, если нет n).e(error): Не выдавать ошибку, если шаблон не найден.r(reverse): Искать назад (для диапазона).- Примеры:
:s/ui_\(\l\)/ui_\u\1/gui_temp — > uiTemp:%s/::Вход в командный режим.%Обозначает «по всему файлу» (применить замену ко всем строкам).sКоманда substitute (заменить).ui_\(.\)Это шаблон поиска (что мы ищем).ui_Точное совпадение с символами «u», «i», и «_».\(и\)Это захватывающие скобки (capturing group). Все, что найдется внутри них, будет «захвачено» и сохранено во временной переменной\1для использования в части «замена»..Означает «любой один символ» (кроме новой строки). В вашем случае, это будет та самая буква (например, ‘u’ в ui_umover или ‘s’ в ui_settings).- Важный момент: Если после
ui_может быть что-то, что не является буквой (например, цифра, знак препинания или пробел), то.захватит и это. Если вы хотите явно указать, что это должна быть буква, можно использовать[a-zA-Z]вместо.или\a(любая буква). Если это только строчная буква, то\l(lowercase). Давайте использовать\l, чтобы быть более точными. - Улучшенный шаблон для поиска только строчной буквы:
ui_\(\l\) /\u\1/Это строка замены (на что мы заменяем).\uЭто специальная последовательность в Vim, которая означает «преобразовать следующий символ в верхний регистр».\1Это обратная ссылка на содержимое первой захватывающей группы. То есть, сюда вставится та самая буква, которую мы нашли послеui_.gФлагglobal. Означает, что нужно заменить все вхождения шаблона в каждой строке, а не только первое (еслиui_встречается несколько раз в одной строке).:%s/foo/bar/gicОписание: Заменить все вхожденияfooнаbarпо всему файлу, игнорируя регистр и с запросом подтверждения.%s/Выполнить замену по всему файлу.fooШаблон поиска —foo.barСтрока замены —bar./gicФлагиgГлобально — заменить все вхождения в каждой строке.iИгнорировать регистр при поиске (найдетfoo,Foo,FOOи т.д.).cЗапрашивать подтверждение перед каждой заменой.
:'<,'>s/\(.*\), \(.*\)/\2 \1/gОписание: Переставить местами «фамилия, имя» на «имя фамилия» только в выделенном блоке текста.:'<,'>s/Выполнить замену только в текущем визуальном выделении.\(.*\), \(.*\)Шаблон поиска\(.*\)Первая захватывающая группа (\1) — захватывает любой текст до запятой (включая пробелы в конце, если они есть).,Буквальная запятая и пробел.\(.*\)Вторая захватывающая группа (\2) — захватывает любой текст после запятой и пробела.\2 \1Строка замены\2Вставляет содержимое второй захваченной группы (в данном случае, «имя»).Вставляет пробел.\1Вставляет содержимое первой захваченной группы (в данном случае, «фамилия»)./gФлаг «глобально» — заменить все вхождения в каждой строке выделения.:%s/TODO:/\UFIXME:\E (2025-06-25)/gОписание: ЗаменитьTODO:наFIXME:(в верхнем регистре) и добавить текущую дату по всему файлу.%s/Выполнить замену по всему файлу.TODO:Шаблон поиска — буквальное совпадение с TODO:.\UFIXME:\E (2025-06-25)Строка замены\UПреобразует все последующие символы в верхний регистр до\E.FIXME:Буквально вставляется, но благодаря\Uбудет в верхнем регистре (FIXME:).\EЗавершает эффект\U(чтобы следующая часть не была в верхнем регистре).(2025-06-25)Буквально добавляется дата (обратите внимание, что дата должна быть актуализирована вручную или через Vim-скрипт)./gФлаг «глобально» — заменить все вхождения в каждой строке.""Показать содержимое всех регистров."xyСкопировать в регистрx."xpВставить содержимое регистраx."Безымянный регистр (по умолчанию дляyиd).%Имя текущего файла.#Имя альтернативного файла.:Содержимое последней команды.jСодержимое последнего копирования.*Системный буфер обмена (выделение мышью, X11).+Системный буфер обмена (Ctrl+C/V).q<регистр>Начать запись макроса в указанный регистр (например,qaдля регистра ‘a’).- (Выполните нужные действия)
qЗавершить запись макроса.@<регистр>Выполнить макрос из указанного регистра (например,@a).[число]@<регистр>Выполнить макрос[число]раз (например,100@a).@@Повторить последний выполненный макрос.:wСохранить файл.:w [имя_файла]Сохранить как новый файл.:wq/:xСохранить и выйти.:qВыйти (только если нет несохраненных изменений).:q!Выйти без сохранения изменений (принудительно).:e [имя_файла]Открыть новый файл для редактирования.:r [имя_файла]Вставить содержимое файла в текущую позицию.:e!Перезагрузить текущий файл (отменить несохраненные изменения).Ctrl + zПриостановить Vim (вернуть в оболочку; для возврата используйтеfg).- Эти команды обычно вводятся в командном режиме (
:). Чтобы они работали при каждом запуске Vim, добавьте их в файл~/.vimrc(на Linux/macOS) или_vimrc(на Windows) в вашей домашней директории. :set nu/:set nonuВключить/отключить абсолютные номера строк.:set rnu/:set nornuВключить/отключить относительные номера строк.:set autoindent/:set noautoindentВключить/отключить автоматический отступ.:set expandtab/:set noexpandtabПреобразовывать/не преобразовывать табуляции в пробелы.:set tabstop=4Установить ширину табуляции в 4 пробела.:set shiftwidth=4Установить ширину отступа для команд>>,<<.:set wrap/:set nowrapВключить/отключить перенос строк.:set nohlsearch :set nohОтключить подсветку текущего поиска. Отключает подсветку уже найденных совпадений.:set noincsearchОтключает инкрементальный поиск (то есть, подсветку по мере ввода запроса).:set incsearchВключить подсветку поиска. (инкрементальный/постепенный поиск):set hlsearchВключить подсветку поиска.:set ic/:set noicВключить/отключить игнорирование регистра при поиске.:set showmode/:set noshowmodeПоказать/скрыть текущий режим Vim..(точка) Повторить последнее изменение.Ctrl + aУвеличить число под курсором.Ctrl + xУменьшить число под курсором.Ctrl + gПоказать информацию о файле (имя, номер строки, процент).:%!Отфильтровать весь файл через внешнюю команду (например,:%!sortотсортирует весь файл).:'<,'>!Отфильтровать выделенный текст через внешнюю команду (появляется после выделения и нажатия:!).[:alnum:]Буквенно-цифровые символы.[:alpha:]Буквы.[:blank:]Пробелы и табуляции.[:cntrl:]Управляющие символы.[:digit:]Цифры (0-9).[:graph:]Графические (печатные, кроме пробела) символы.[:lower:]Строчные буквы.[:print:]Печатные (включая пробел) символы.[:punct:]Знаки препинания.[:space:]Пробельные символы (пробел, табуляция, новая строка и т.д.).[:upper:]Прописные буквы.[:xdigit:]Шестнадцатеричные цифры.?Ноль или одно вхождение.*Ноль или более вхождений.\+Одно или более вхождений.\{n\}Точноnвхождений.\{n,\}Не менееnвхождений.\{,m\}Не болееmвхождений.\{n,m\}Отnдоmвхождений.\.Точка (экранированная).\dЦифра.\DНе цифра.\sПробельный символ.\SНе пробельный символ.\wСимвол слова (буквы, цифры,_).\WНе символ слова.\<Начало слова.\>Конец слова.^Начало строки._Конец строки.\bГраница слова (аналогично\<или\>).\tТабуляция.\nНовая строка.\rВозврат каретки.\( \)Захват группы (для обратных ссылок\1,\2и т.д.).:splitили:sp:- Создает новое горизонтальное разделение над текущим окном.
- Если не указано имя файла, открывает в новом окне текущий файл.
- Пример: :sp или
:sp new_file.txt :vsplitили:vsp:- Создает новое вертикальное разделение справа от текущего окна.
- Если не указано имя файла, открывает в новом окне текущий файл.
- Пример:
:vspили:vsp another_file.py Ctrl + w s:Короткая команда для:split. Создает горизонтальное разделение.Ctrl + w v:Короткая команда для:vsplit. Создает вертикальное разделение. (Это та, которую вы упомянули!)Ctrl + w wПереключает фокус между всеми открытыми разделами по кругу (вперед). Самая часто используемая команда.Ctrl + w hПеремещает фокус в раздел влево от текущего.Ctrl + w jПеремещает фокус в раздел вниз от текущего.Ctrl + w kПеремещает фокус в раздел вверх от текущего.Ctrl + w lПеремещает фокус в раздел вправо от текущего.Ctrl + w =Выравнивает размеры всех разделов, делая их примерно одинаковыми. Очень полезно после создания или закрытия окон.Ctrl + w +Увеличивает высоту текущего горизонтального раздела (или ширину вертикального, если есть). Добавьте число для большего изменения:5 Ctrl + w +.Ctrl + w -Уменьшает высоту текущего горизонтального раздела (или ширину вертикального, если есть). Добавьте число для большего изменения:5 Ctrl + w -.Ctrl + w <Уменьшает ширину текущего вертикального раздела.Ctrl + w >Увеличивает ширину текущего вертикального раздела.:resize [N]или:res [N]: Устанавливает высоту текущего окна вNстрок.:vertical resize [N]Устанавливает ширину текущего окна вNстолбцов.:closeили:cloЗакрывает текущее окно. Если есть несохраненные изменения, Vim выдаст предупреждение.:qЗакрывает текущее окно, если нет несохраненных изменений.:q!Закрывает текущее окно, отбрасывая несохраненные изменения (принудительно).Ctrl + w cКороткая команда для:close.Ctrl + w oЗакрывает все другие разделы, оставляя только текущий активный раздел. Очень удобно, чтобы быстро вернуться к одному файлу.Ctrl + w rВращает разделы по часовой стрелке. Перемещает текущий раздел вправо/вниз.Ctrl + w RВращает разделы против часовой стрелки. Перемещает текущий раздел влево/вверх.Ctrl + w xМеняет местами текущий раздел с соседним (по горизонтали или вертикали).:sbuffer [номер/имя]или:sbОткрывает указанный буфер в новом горизонтальном разделении.:vert sbuffer [номер/имя]или:vsbОткрывает указанный буфер в новом вертикальном разделении.
-
В строке поиска (после
/ или ?) нажмите Ctrl + r, затем:
Это необязательная часть, которая определяет, на каких строках будет выполняться замена. Если диапазон не указан, команда применяется только к текущей строке.
-
Это регулярное выражение, которое Vim будет искать. Это может быть как простая строка, так и сложный паттерн.
-
Это строка, на которую будет заменено найденное совпадение. В этой части можно использовать буквальные символы, а также специальные последовательности:
-
Это необязательные модификаторы, которые изменяют поведение команды замены.
-
Пример:
Иванов, Иван -> Иван Иванов
-
Пример:
Это TODO: задача -> Это FIXME: (2025-06-25) задача
Регистры
Макросы
Работа с файлами
Настройка Vim
-
(команды
:set и .vimrc)
Разное
Регулярные выражения
-
Эти символы используются в шаблонах для поиска и замены.
POSIX Классы Символов (для
[...])
Квантификаторы
Специальные символы
Работа с окнами (Split Windows)
-
Создание разделов (Creating Splits):
Перемещение между разделами (Navigating Splits):
Эти команды позволяют быстро переключать фокус (курсор) между открытыми разделами.
Изменение размеров разделов (Resizing Splits):
Вы можете вручную или автоматически изменять размеры окон.
Закрытие разделов (Closing Splits):
Перемещение разделов (Moving Splits):
Открытие буфера в новом разделе (Opening Buffers in New Splits):
Эти команды позволяют открыть уже загруженный в буфер файл в новом разделе.
