Шпаргалка по Vim

6 мин чтения·Matthieu

Быстрый справочник команд Vim, организованный для работы по администрированию серверов. Сохрани эту страницу в закладки.

Режимы

Режим Вход Назначение Возврат в нормальный
Нормальный Esc Навигация, выполнение команд Уже активен
Вставка i, a, o, I, A, O Ввод текста Esc
Визуальный v (символ), V (строка), Ctrl+v (блок) Выделение текста Esc
Командный : Выполнение ex-команд Enter или Esc

Операции с файлами

Команда Действие
:w Сохранить
:q Выйти (ошибка при несохранённых изменениях)
:wq или ZZ Сохранить и выйти
:q! Выйти без сохранения
:w !sudo tee % Сохранить файл только для чтения (когда забыл sudoedit)
:e /путь/к/файлу Открыть файл
:saveas /путь Сохранить как новый файл

Навигация

По символам и строкам

Клавиша Действие
h j k l Влево, вниз, вверх, вправо
0 Начало строки
$ Конец строки
^ Первый непробельный символ

По словам

Клавиша Действие
w / W Следующее слово / СЛОВО
b / B Предыдущее слово / СЛОВО
e Конец слова

По файлу

Клавиша Действие
gg Первая строка
G Последняя строка
42G или :42 Строка 42
Ctrl+d / Ctrl+u Полстраницы вниз / вверх
Ctrl+f / Ctrl+b Страница вниз / вверх
% Парная скобка

Поиск

Клавиша Действие
/паттерн Поиск вперёд
?паттерн Поиск назад
n / N Следующее / предыдущее совпадение
* Найти слово под курсором (вперёд)
# Найти слово под курсором (назад)

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

Клавиша Действие
i Перед курсором
a После курсора
I Начало строки
A Конец строки
o Новая строка ниже
O Новая строка выше
s Удалить символ и вставить
S или cc Удалить строку и вставить

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

Команда Действие
x Удалить символ
dd Удалить строку
dw Удалить слово
d$ или D Удалить до конца строки
d0 Удалить до начала строки
cc Изменить строку
cw Изменить слово
ci" Изменить внутри кавычек
ci( Изменить внутри скобок
yy Скопировать строку
yw Скопировать слово
p / P Вставить после / перед
u Отменить
Ctrl+r Повторить
. Повторить последнее изменение
>> / << Добавить / убрать отступ строки
J Объединить текущую строку со следующей

Счётчики и композиция

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

Пример Действие
3dd Удалить 3 строки
5j На 5 строк вниз
d2w Удалить 2 следующих слова
4>> Добавить отступ 4 строкам
y3w Скопировать 3 слова
ct; Изменить текст до ;
df" Удалить до следующей " (включительно)

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

Команда Действие
v Начать посимвольное выделение
V Начать построчное выделение
Ctrl+v Начать блочное выделение
d Удалить выделенное
y Скопировать выделенное
> / < Добавить / убрать отступ выделенного
:s/^/#/ Закомментировать выделенные строки (в визуальном режиме строк)
U / u Выделенное в верхний / нижний регистр

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

Команда Действие
:s/старый/новый/ Заменить первый в текущей строке
:s/старый/новый/g Заменить все в текущей строке
:%s/старый/новый/g Заменить все в файле
:%s/старый/новый/gc Заменить все с подтверждением
:5,10s/старый/новый/g Заменить все в строках 5-10

Частые паттерны regex

Паттерн Совпадает с
^ / $ Начало / конец строки
. Любой символ
\d Цифра
\s Пробельный символ
.* Любые символы (жадный)
\v Режим «very magic» (меньше экранирования)

Серверные примеры

:%s/listen 80;/listen 443 ssl;/g
:%s/nginx:1.24/nginx:1.27/g
:%s/192\.168\.1\.1/10.0.0.1/g

Буферы

Команда Действие
:e файл Открыть в буфере
:bn / :bp Следующий / предыдущий буфер
:ls Список буферов
:b2 Перейти к буферу 2
:bd Закрыть буфер

Сплиты

Команда Действие
:sp файл Горизонтальный сплит
:vs файл Вертикальный сплит
Ctrl+w h/j/k/l Перемещение между сплитами
Ctrl+w = Одинаковый размер сплитов
Ctrl+w q Закрыть сплит
Ctrl+w _ Максимизировать высоту текущего сплита
Ctrl+w | Максимизировать ширину текущего сплита

Вкладки

Команда Действие
:tabnew файл Открыть в новой вкладке
gt / gT Следующая / предыдущая вкладка
:tabclose Закрыть вкладку

Настройки .vimrc

Минимальная конфигурация для серверной работы:

set nocompatible
set encoding=utf-8
set number relativenumber
syntax on
set expandtab tabstop=2 shiftwidth=2 softtabstop=2
set incsearch hlsearch ignorecase smartcase
set showmatch laststatus=2 showmode
set mouse=a
set pastetoggle=<F2>
set noswapfile
set cursorline
set list listchars=tab:>>·,trail:·
filetype plugin indent on

Горячие клавиши для серверной работы

Задача Команды
Безопасно редактировать root-файл sudoedit /etc/nginx/nginx.conf
Вставить без каскадного отступа F2, i, вставить, F2
Перейти к строке с ошибкой vim +42 file.yml
Преобразовать табы в пробелы (YAML) :%s/\t/ /g
Закомментировать несколько строк V, выделить, :s/^/#/
Раскомментировать несколько строк V, выделить, :s/^#//
Проверить конфигурацию Nginx :!sudo nginx -t
Перезагрузить не выходя из Vim :!sudo systemctl reload nginx

Устранение неполадок

Проблема Решение
Не могу печатать после открытия Vim Нажми i (ты в нормальном режиме)
Терминал завис (Ctrl+s) Нажми Ctrl+q
Лесенка отступов при вставке Переключи режим вставки: F2 или :set paste
Файл только для чтения Выйди, открой заново через sudoedit
Предупреждение о swap-файле Выбери (D)elete, если другая сессия не редактирует файл