Vim для начинающих: шпаргалка по основным командам

2234
Vim для начинающих: шпаргалка по основным командам

Vim отличается от обычных текстовых редакторов тем, что одна и та же клавиша выполняет разные действия в разных режимах. В режиме вставки клавиша d печатает букву, а в обычном режиме запускает удаление текста.

Новичку не нужно запоминать сотни команд. Для начала достаточно научиться переключать режимы, перемещать курсор, изменять текст, отменять действия, искать слова, сохранять файл и выходить из редактора.

Главное правило Если Vim ведёт себя непонятно, нажмите Esc. Редактор вернётся в обычный режим, после чего можно вводить команды.

Содержание

Быстрый старт

Откройте терминал и передайте Vim имя файла.

vim notes.txt

Если файла пока нет, Vim создаст новый буфер. Файл появится на диске после сохранения.

  1. Нажмите i, чтобы перейти в режим вставки.
  2. Введите несколько строк текста.
  3. Нажмите Esc, чтобы вернуться в обычный режим.
  4. Введите :w и нажмите Enter, чтобы сохранить файл.
  5. Введите :q и нажмите Enter, чтобы закрыть Vim.

Сохранить файл и сразу выйти можно командой :wq.

Выйти без сохранения можно командой :q!. Восклицательный знак заставляет Vim проигнорировать несохранённые изменения.

Задача Команда
Начать ввод текста i
Вернуться к командам Esc
Сохранить файл :w
Закрыть Vim :q
Сохранить и закрыть :wq
Закрыть без сохранения :q!

Режимы Vim

Vim использует несколько режимов. Название текущего режима обычно показывается в нижней части окна.

Режим Для чего нужен Как включить
Обычный Навигация и команды редактирования Esc
Вставка Обычный ввод текста i, a, o
Визуальный Выделение текста v, V, Ctrl-v
Командная строка Сохранение, замена, настройки и работа с файлами :
Замена Ввод поверх существующего текста R

Переход в режим вставки

Команда Действие
i Вставить текст перед курсором
a Вставить текст после курсора
I Перейти к первому непробельному символу строки и начать ввод
A Перейти в конец строки и начать ввод
o Создать строку ниже
O Создать строку выше
s Удалить символ под курсором и начать ввод
S Очистить строку и начать ввод
R Заменять существующие символы новыми

После ввода текста нажмите Esc. Последовательность i, ввод текста, Esc станет одним изменением, которое можно отменить командой u.

Перемещение по тексту

Перемещение по символам

Команда Направление
h На один символ влево
j На одну строку вниз
k На одну строку вверх
l На один символ вправо

Стрелки также обычно работают, но команды h, j, k и l позволяют не переносить руку на другую часть клавиатуры.

Перемещение по словам

Команда Действие
w Перейти к началу следующего слова
e Перейти к концу текущего или следующего слова
b Перейти к началу предыдущего слова
W Перейти к следующему фрагменту, разделённому пробелами
E Перейти к концу фрагмента, разделённого пробелами
B Перейти к предыдущему фрагменту, разделённому пробелами

Строчные команды учитывают знаки препинания. Прописные команды считают словом любой непрерывный фрагмент без пробелов.

Перемещение внутри строки

Команда Действие
0 Перейти в начало строки
^ Перейти к первому непробельному символу
$ Перейти в конец строки
f{символ} Перейти к следующему указанному символу
F{символ} Найти символ в обратном направлении
t{символ} Перейти к позиции перед указанным символом
T{символ} То же действие в обратном направлении
; Повторить поиск символа
, Повторить поиск символа в обратном направлении

Команда f, переместит курсор к следующей запятой в текущей строке. Команда dt, удалит текст до следующей запятой, но сохранит саму запятую.

Перемещение по файлу

Команда Действие
gg Перейти к первой строке
G Перейти к последней строке
25G Перейти к строке 25
:25 Перейти к строке 25 через командную строку
Ctrl-f Прокрутить страницу вперёд
Ctrl-b Прокрутить страницу назад
Ctrl-d Прокрутить вниз примерно на половину экрана
Ctrl-u Прокрутить вверх примерно на половину экрана
zz Поместить текущую строку в центр экрана
zt Поместить текущую строку в верхнюю часть экрана
zb Поместить текущую строку в нижнюю часть экрана

Полезные переходы

  • % переходит между парными скобками.
  • { переходит к предыдущему абзацу.
  • } переходит к следующему абзацу.
  • H перемещает курсор в верхнюю часть видимой области.
  • M перемещает курсор в середину видимой области.
  • L перемещает курсор в нижнюю часть видимой области.
  • Ctrl-o возвращает к предыдущей позиции.
  • Ctrl-i снова переходит вперёд по истории позиций.

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

Команда Действие
x Удалить символ под курсором
X Удалить символ перед курсором
r{символ} Заменить один символ
dd Удалить текущую строку
D Удалить текст от курсора до конца строки
dw Удалить текст до начала следующего слова
de Удалить текст до конца слова
diw Удалить слово под курсором
cc Заменить текущую строку
C Заменить текст от курсора до конца строки
cw Заменить слово или его оставшуюся часть
ciw Заменить слово под курсором
J Объединить текущую строку со следующей
~ Изменить регистр символа
>> Увеличить отступ строки
<< Уменьшить отступ строки
== Выровнять отступ текущей строки
gg=G Пересчитать отступы во всём файле

Команды удаления в Vim работают как вырезание. Удалённый текст попадает в регистр, поэтому его можно вернуть командами p или P.

Операторы, движения и объекты текста

Многие команды Vim строятся по формуле оператор, движение.

Оператор Действие
d Удалить
c Удалить и перейти в режим вставки
y Скопировать
> Увеличить отступ
< Уменьшить отступ
gU Перевести символы в верхний регистр
gu Перевести символы в нижний регистр

После оператора укажите область действия.

  • dw удаляет текст до начала следующего слова.
  • d$ удаляет текст до конца строки.
  • y} копирует текст до следующего абзаца.
  • gUw переводит слово в верхний регистр.
  • 3dd удаляет три строки.
  • d3w удаляет текст на протяжении трёх переходов по словам.

Объекты текста

Объекты текста позволяют работать не с направлением, а с логической областью вокруг курсора.

Объект Область
iw Внутренняя часть слова
aw Слово вместе с окружающим пробелом
i" Текст внутри двойных кавычек
a" Текст вместе с двойными кавычками
i' Текст внутри одинарных кавычек
i( Текст внутри круглых скобок
a( Текст вместе с круглыми скобками
i[ Текст внутри квадратных скобок
i{ Текст внутри фигурных скобок
ip Содержимое текущего абзаца
ap Абзац вместе с окружающей пустой строкой
it Содержимое парного HTML- или XML-тега

Команда ci" удаляет содержимое двойных кавычек и включает режим вставки. Кавычки остаются на месте.

Команда da( удаляет содержимое круглых скобок вместе со скобками.

Команда yip копирует текущий абзац.

Копирование, вырезание и вставка

Vim называет копирование словом yank. Основная команда копирования начинается с y.

Команда Действие
yy Скопировать текущую строку
Y Скопировать текущую строку
yw Скопировать текст до следующего слова
yiw Скопировать слово под курсором
y$ Скопировать текст до конца строки
3yy Скопировать три строки
p Вставить после курсора или ниже текущей строки
P Вставить перед курсором или выше текущей строки

Как не потерять скопированный текст

Операции удаления и изменения перезаписывают основной регистр. Если после yy выполнить dd, обычная команда p вставит удалённую строку, а не ранее скопированную.

Регистр 0 хранит последний текст, скопированный командой y.

  • "0p вставляет последний скопированный текст.
  • "_d удаляет текст в чёрный регистр и не перезаписывает обычный регистр.
  • "ayy копирует строку в именованный регистр a.
  • "ap вставляет содержимое регистра a.
  • :registers показывает содержимое регистров.

Системный буфер обмена

Системный буфер обмена обычно связан с регистром +.

  • "+y копирует выделенный текст в системный буфер.
  • "+yy копирует текущую строку в системный буфер.
  • "+p вставляет текст из системного буфера.

Проверьте поддержку системного буфера командой

:echo has('clipboard')

Результат 1 означает, что функция доступна. Результат 0 обычно говорит о том, что установлен вариант Vim без поддержки графического буфера обмена. В Linux может потребоваться пакет с полной или графической сборкой Vim.

Отмена, возврат и повтор команд

Команда Действие
u Отменить последнее изменение
Ctrl-r Вернуть отменённое изменение
U Отменить изменения текущей строки
. Повторить последнее изменение

Команда . особенно полезна при повторяющихся правках. Например, выполните ciw, введите новое слово, нажмите Esc, перейдите к следующему нужному слову и нажмите ..

Vim повторит всю операцию замены, включая введённый текст.

Команда U не равна многократному нажатию u. Она отменяет изменения текущей строки и при повторном запуске может вернуть отменённые правки.

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

Поиск текста

Команда Действие
/текст Искать вперёд
?текст Искать назад
n Перейти к следующему совпадению
N Перейти к предыдущему совпадению
* Искать слово под курсором вперёд
# Искать слово под курсором назад
:nohlsearch Убрать подсветку результатов

Введите /error и нажмите Enter. Vim найдёт следующее вхождение слова error. Используйте n и N для перехода между результатами.

Замена текста

Команда Действие
:s/старое/новое/ Заменить первое совпадение в текущей строке
:s/старое/новое/g Заменить все совпадения в текущей строке
:%s/старое/новое/g Заменить все совпадения во всём файле
:%s/старое/новое/gc Запрашивать подтверждение каждой замены
:%s/старое/новое/gi Не учитывать регистр символов
:5,20s/старое/новое/g Заменить совпадения в строках с 5 по 20

При подтверждении замены Vim предлагает несколько вариантов.

  • y заменить текущее совпадение.
  • n пропустить текущее совпадение.
  • a заменить все оставшиеся совпадения.
  • q прекратить замену.
  • l заменить текущее совпадение и завершить команду.

Символы ., *, [ и некоторые другие имеют специальное значение в шаблонах Vim. Для поиска текста почти буквально можно добавить режим very nomagic.

/Vfile.name[1]

Обратную косую черту в таком шаблоне всё равно потребуется экранировать.

Визуальный режим

Визуальный режим выделяет текст, после чего к выделению можно применить команду.

Команда Действие
v Выделять по символам
V Выделять целые строки
Ctrl-v Выделять прямоугольный блок
o Перейти к другому краю выделения
y Скопировать выделение
d Удалить выделение
c Заменить выделение
> Увеличить отступ
< Уменьшить отступ
= Пересчитать отступ
u Перевести выделение в нижний регистр
U Перевести выделение в верхний регистр

Вставка текста в несколько строк

  1. Нажмите Ctrl-v.
  2. Выберите нужные строки командами движения.
  3. Нажмите I, чтобы вставить текст перед блоком.
  4. Введите текст.
  5. Нажмите Esc.

После выхода из режима вставки Vim добавит текст во все выбранные строки. Команда A выполняет похожую операцию в конце прямоугольного блока.

Файлы, буферы и окна

Работа с файлами

Команда Действие
:e file.txt Открыть файл в текущем окне
:enew Создать пустой буфер
:w Сохранить текущий файл
:w copy.txt Записать содержимое в другой файл
:saveas copy.txt Сохранить под новым именем и продолжить работу с новым файлом
:r file.txt Вставить содержимое другого файла ниже курсора
:pwd Показать текущий рабочий каталог
:cd path Изменить рабочий каталог
:edit . Открыть встроенный файловый браузер

Буферы

Открытые файлы хранятся в буферах. Закрытие окна не всегда удаляет соответствующий буфер.

Команда Действие
:ls Показать список буферов
:bnext Перейти к следующему буферу
:bprevious Перейти к предыдущему буферу
:buffer 3 Открыть буфер с номером 3
:buffer name Открыть буфер по части имени
:bdelete Удалить текущий буфер из списка

Разделение окна

Команда Действие
:split Разделить окно горизонтально
:vsplit Разделить окно вертикально
:split file.txt Открыть файл в горизонтальном окне
:vsplit file.txt Открыть файл в вертикальном окне
Ctrl-w h Перейти в окно слева
Ctrl-w j Перейти в окно снизу
Ctrl-w k Перейти в окно сверху
Ctrl-w l Перейти в окно справа
Ctrl-w w Перейти к следующему окну
Ctrl-w = Выровнять размеры окон
:close Закрыть текущее окно
:only Закрыть остальные окна

Вкладки

Команда Действие
:tabnew Создать вкладку
:tabedit file.txt Открыть файл в новой вкладке
gt Перейти к следующей вкладке
gT Перейти к предыдущей вкладке
:tabclose Закрыть текущую вкладку

Вкладка Vim хранит набор окон, а не один конкретный файл. Для обычного переключения между файлами чаще удобнее использовать буферы.

Метки и возврат к нужному месту

Метки запоминают позиции внутри файлов.

Команда Действие
ma Создать локальную метку a
'a Перейти к строке с меткой a
`a Перейти к точной позиции метки a
mA Создать глобальную метку A
:marks Показать список меток
'' Вернуться к строке предыдущего перехода
`` Вернуться к точной позиции предыдущего перехода

Строчные метки работают внутри одного файла. Прописные метки позволяют переходить между файлами.

Макросы для повторяющихся действий

Макрос записывает последовательность команд в регистр.

  1. Нажмите qa, чтобы начать запись в регистр a.
  2. Выполните нужные действия.
  3. Нажмите q, чтобы остановить запись.
  4. Нажмите @a, чтобы воспроизвести макрос.
  5. Нажмите @@, чтобы повторить последний макрос.

Команда 10@a запускает макрос десять раз. Перед массовым запуском проверьте макрос на одной или двух строках и сохраните файл.

Минимальная настройка Vim

Пользовательские настройки хранятся в файле конфигурации.

  • Linux и macOS используют ~/.vimrc.
  • Windows обычно использует %USERPROFILE%_vimrc.
  • Точный путь можно проверить командой :version.

Откройте конфигурацию из Vim.

:edit $MYVIMRC

Пример базовой конфигурации без плагинов

set number
 set relativenumber
 
 set ignorecase
 set smartcase
 set incsearch
 set hlsearch
 
 set expandtab
 set tabstop=4
 set shiftwidth=4
 set softtabstop=4
 set autoindent
 
 filetype plugin indent on
 syntax enable
Параметр Назначение
number Показывает абсолютные номера строк
relativenumber Показывает расстояние до соседних строк
ignorecase Не учитывает регистр при поиске
smartcase Учитывает регистр, если запрос содержит прописную букву
incsearch Показывает результаты во время ввода запроса
hlsearch Подсвечивает все совпадения
expandtab Вставляет пробелы вместо символа табуляции
shiftwidth=4 Использует четыре пробела для изменения отступа
tabstop=4 Показывает символ табуляции шириной четыре позиции
softtabstop=4 Использует шаг в четыре позиции при вводе и удалении отступов

После сохранения примените конфигурацию без перезапуска Vim.

:source $MYVIMRC

Проверьте конкретный параметр командой

:set number?
 :set shiftwidth?

Команда покажет текущее значение параметра.

Общий системный буфер

Если сборка Vim поддерживает буфер обмена, можно добавить следующую настройку.

set clipboard=unnamedplus

После изменения обычные команды y, d и p начнут активнее взаимодействовать с системным буфером. Такое поведение подходит не всем, поэтому сначала проверьте настройку во временном сеансе.

:set clipboard=unnamedplus

Вернуть стандартное поведение можно командой

:set clipboard=

Встроенная справка и обучение

Vim содержит подробную справочную систему. Откройте её командой :help.

Команда Что откроется
:help Главная страница справки
:help motion.txt Команды перемещения
:help change.txt Удаление, изменение и замена текста
:help registers Регистры
:help visual-mode Визуальный режим
:help :substitute Команда поиска и замены
:help vimrc Файл конфигурации

В окне справки поместите курсор на ссылку и нажмите Ctrl-]. Для возврата используйте Ctrl-o или Ctrl-t.

Для интерактивного обучения запустите в терминале

vimtutor

Курс создаёт учебную копию текста, поэтому упражнения не повреждают исходный файл. Если команда отсутствует, проверьте, установлен ли полный пакет Vim.

Дополнительные сведения доступны в онлайн-справке Vim и на странице документации проекта.

Частые проблемы

Клавиши печатают команды вместо текста

Vim находится в обычном режиме. Нажмите i, a или o, чтобы перейти к вводу текста.

Vim не позволяет выйти

Сначала нажмите Esc, затем выберите подходящую команду.

  • :q закрывает файл без несохранённых изменений.
  • :wq сохраняет файл и закрывает Vim.
  • :q! отбрасывает изменения и закрывает Vim.
  • :qa закрывает все окна и буферы.
  • :qa! закрывает всё без сохранения.

Появилась ошибка E45 или сообщение readonly

Буфер или файл открыт только для чтения. Проверьте состояние командой :set readonly?. Отключить режим только для чтения внутри Vim можно командой :set noreadonly, но файловые права операционной системы такая команда не меняет.

Попытка принудительной записи выполняется через :w!. Если у пользователя нет прав на каталог или файл, Vim всё равно не сможет сохранить данные.

После вставки сломались отступы

Современные терминалы часто передают Vim информацию о вставке из буфера обмена, но поддержка зависит от терминала и сборки редактора.

При проблемах временно включите режим вставки.

:set paste

Вставьте текст, затем сразу отключите режим.

:set nopaste

Не оставляйте параметр paste включённым. Режим отключает часть автоматических отступов и назначений клавиш для вставки.

Vim показывает предупреждение о swap-файле

Swap-файл может означать, что тот же документ уже открыт в другом процессе или предыдущий сеанс завершился аварийно.

  1. Проверьте имя файла, имя компьютера и идентификатор процесса в предупреждении.
  2. Не открывайте документ для параллельного редактирования, если другой процесс ещё работает.
  3. Выберите восстановление, если предыдущий сеанс завершился аварийно.
  4. Проверьте восстановленный текст и сохраните его под отдельным именем.
  5. Удаляйте старый swap-файл только после проверки данных и завершения второго процесса.

Запустить восстановление из терминала можно командой

vim -r file.txt

Команды системного буфера не работают

Проверьте поддержку буфера.

:echo has('clipboard')

Результат 0 указывает на ограниченную сборку Vim. Установка другой сборки обычно решает проблему. В удалённом сеансе SSH системный буфер относится к удалённому компьютеру, если терминал или дополнительные инструменты не передают данные на локальную машину.

Файл изменился за пределами Vim

Команда :checktime просит Vim проверить изменения файлов. Команда :edit! перечитывает текущий файл с диска и отбрасывает несохранённые локальные правки.

Перед :edit! убедитесь, что локальные изменения больше не нужны. Полный откат после перечитывания файла может оказаться невозможен.

Краткая шпаргалка Vim

Задача Команда
Вернуться в обычный режим Esc
Начать ввод i
Добавить текст после курсора a
Создать строку ниже o
Перемещаться по символам h, j, k, l
Перемещаться по словам w, e, b
Начало и конец строки 0, ^, $
Начало и конец файла gg, G
Удалить символ x
Удалить строку dd
Удалить слово diw
Заменить слово ciw
Скопировать строку yy
Вставить p, P
Отменить изменение u
Вернуть изменение Ctrl-r
Повторить изменение .
Искать вперёд /текст
Следующее совпадение n
Заменить во всём файле :%s/старое/новое/g
Выделить символы v
Выделить строки V
Сохранить :w
Выйти :q
Сохранить и выйти :wq
Выйти без сохранения :q!
Открыть справку :help

Что запомнить в первую очередь

  1. Esc возвращает в обычный режим.
  2. i включает ввод текста.
  3. h, j, k, l перемещают курсор.
  4. u отменяет изменение, а Ctrl-r возвращает его.
  5. dd удаляет строку, yy копирует строку, p вставляет текст.
  6. /текст запускает поиск.
  7. :w сохраняет файл.
  8. :q закрывает Vim.
  9. :q! закрывает Vim без сохранения.
  10. . повторяет последнее изменение.

После освоения базовых команд переходите к комбинациям операторов с движениями и объектами текста. Именно команды вроде ciw, di", yap и dt, превращают Vim из необычного редактора в быстрый инструмент обработки текста.

FAQ

Почему Vim не печатает текст сразу после запуска?

Vim запускается в обычном режиме, где клавиши выполняют команды. Нажмите i, чтобы начать ввод, и Esc, чтобы вернуться к командам.

Как выйти из Vim?

Нажмите Esc, введите :q и нажмите Enter. При несохранённых изменениях используйте :wq для сохранения или :q! для выхода без сохранения.

Чем команды :wq и :x отличаются друг от друга?

:wq записывает файл и закрывает окно. :x записывает файл только при наличии изменений, а затем закрывает окно.

Можно ли пользоваться стрелками вместо h, j, k и l?

Да, стрелки обычно работают. Команды h, j, k и l удобнее при частом редактировании, поскольку рука остаётся на основной части клавиатуры.

Как вставить текст из системного буфера обмена?

Используйте "+p. Если команда не работает, проверьте поддержку буфера через :echo has('clipboard').

Чем удаление в Vim отличается от обычного удаления?

Большинство удалённых фрагментов попадает в регистры и доступно для последующей вставки. Для удаления без сохранения используйте чёрный регистр, например "_dd.

Нужно ли устанавливать плагины новичку?

Нет. Сначала освойте обычный режим, движения, операторы, объекты текста, поиск, буферы и встроенную справку. Плагины лучше добавлять после появления конкретной задачи.

Подойдут ли команды Vim для Neovim?

Основные режимы, движения, операторы, объекты текста, регистры, поиск и команды редактирования в Vim и Neovim совместимы. Настройка, плагины и некоторые дополнительные функции различаются.

Alt text
Обращаем внимание, что все материалы в этом блоге представляют личное мнение их авторов. Редакция SecurityLab.ru не несет ответственности за точность, полноту и достоверность опубликованных данных. Вся информация предоставлена «как есть» и может не соответствовать официальной позиции компании.
AI-челлендж по пентесту CyberED × Standoff Hackbase
01
Собери агента
02
Выпусти на полигон
03
Посмотри кто победит
В челлендж
10–17 сентября Публичный рейтинг

Гиганяшка

Технологии без шума вентиляторов и сухих спецификаций.

Рекламодатель
ООО «СерчИнформ»
ИНН: 7704306397
searchinform.ru↗
ИИ-ассистент СерчИнформ