LEARN X · ЗА 13 МИН

Vim

Vim за 13 минут: режимы, перемещение, поиск и замена, операторы, визуальный режим, окна и макросы — весь редактор на одной странице с примерами.

Vim — модальный текстовый редактор: одни и те же клавиши делают разное в зависимости от режима. Это его сила и причина первого ступора. Ниже — весь рабочий минимум на одной странице: каждая команда снабжена комментарием прямо рядом. Читай сверху вниз и пробуй в реальном Vim.

1. Запуск и режимы

Vim всегда находится в одном из режимов. Главный — Normal: клавиши это команды, а не текст. Чтобы печатать текст, надо явно войти в Insert.

vim file.txt    " открыть файл в редакторе (создаст, если нет)
vim             " открыть пустой буфер
vimtutor        " встроенный интерактивный учебник (~30 мин) — запусти его

" Четыре основных режима:
" Normal  — навигация и команды (стартовый режим). Сюда возвращает Esc
" Insert  — ввод текста (как в обычном редакторе)
" Visual  — выделение текста
" Command — командная строка снизу, начинается с :  (например :wq)

" Esc     — вернуться в Normal из любого режима (жми, если запутался)
" :        — войти в командный режим (Command)

2. Выход и сохранение

Самый частый вопрос новичка: «как выйти из Vim?». Команды ниже даются из режима Normal (сначала нажми Esc).

:w              " записать (сохранить) файл
:w newname      " сохранить под другим именем
:q              " выйти (если нет несохранённых изменений)
:wq             " сохранить и выйти
:x              " то же, что :wq, но пишет только при изменениях
ZZ              " сохранить и выйти (без двоеточия, из Normal)
:q!             " выйти БЕЗ сохранения (отбросить изменения)
ZQ              " выйти без сохранения (аналог :q!)
:wq!            " сохранить и выйти, игнорируя предупреждения

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

Разные клавиши входят в Insert в разных точках — это экономит лишние перемещения.

i               " insert: вставка ПЕРЕД курсором
a               " append: вставка ПОСЛЕ курсора
I               " вставка в начало строки (перед первым непробельным символом)
A               " вставка в конец строки
o               " открыть новую строку НИЖЕ и войти в Insert
O               " открыть новую строку ВЫШЕ и войти в Insert
" Esc           " выйти обратно в Normal

4. Перемещение

В Normal курсор двигают буквами, а не стрелками — руки остаются на домашнем ряду.

h   j   k   l   " влево / вниз / вверх / вправо

w               " в начало следующего слова
b               " назад в начало слова
e               " в конец слова

0               " в самое начало строки (нулевая колонка)
^               " к первому непробельному символу строки
$               " в конец строки

gg              " в начало файла (первая строка)
G               " в конец файла (последняя строка)
:42             " перейти на строку 42 (или 42G)
Ctrl-d          " прокрутка на полэкрана вниз
Ctrl-u          " прокрутка на полэкрана вверх

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

/слово          " искать «слово» вперёд, Enter — перейти
?слово          " искать «слово» назад
n               " к следующему совпадению (в направлении поиска)
N               " к предыдущему совпадению

fx              " find: прыгнуть к следующему символу x в строке
Fx              " то же, но назад
tx              " till: встать ПЕРЕД следующим x
Tx              " till назад: встать ПОСЛЕ предыдущего x
;               " повторить последний f/F/t/T
,               " повторить его же в обратную сторону

*               " искать слово под курсором вперёд
#               " искать слово под курсором назад
:noh            " убрать подсветку результатов поиска

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

Удаление и вставка работают через невидимый буфер обмена Vim («регистр»).

x               " удалить символ под курсором
dd              " удалить (вырезать) всю строку
dw              " удалить слово от курсора

cc              " заменить строку целиком (удалить + Insert)
cw              " заменить слово (change word)
r               " заменить один символ под курсором (например rX)

yy              " yank: скопировать строку
p               " вставить ПОСЛЕ курсора / строки
P               " вставить ПЕРЕД курсором / строкой

u               " undo: отменить последнее действие
Ctrl-r          " redo: вернуть отменённое
.               " повторить последнюю команду редактирования

7. Операторы и движения

Это ключевая идея Vim: оператор + движение = команда. Выучив операторы и движения по отдельности, ты комбинируешь их во множество команд.

" Операторы: d (delete), c (change), y (yank)
" Движения:  w e $ 0 G и т.д. — задают, НА СКОЛЬКО подействует оператор

dw              " delete word — удалить до начала следующего слова
d$              " удалить до конца строки
d0              " удалить до начала строки
dG              " удалить до конца файла
ci"             " change inside " — заменить текст ВНУТРИ кавычек
ca(             " change around ( — заменить вместе со скобками
yiw             " скопировать слово целиком (inner word)

" Числа-множители повторяют движение/команду:
3dd             " удалить 3 строки
2dw             " удалить 2 слова
5j              " опуститься на 5 строк вниз
d3w             " удалить 3 слова вперёд

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

Сначала выделяешь, потом применяешь операцию — наглядная альтернатива «оператор + движение».

v               " Visual: посимвольное выделение
V               " Visual Line: выделение целыми строками
Ctrl-v          " Visual Block: прямоугольный (блочный) выбор

" Двигай курсор (h j k l, w, $...), чтобы расширить выделение, затем:
d               " удалить выделенное
y               " скопировать выделенное
c               " заменить выделенное
>               " сдвинуть выделение вправо (отступ)
<               " сдвинуть выделение влево
u               " сделать выделение строчными буквами
U               " сделать выделение ПРОПИСНЫМИ

" Блочный режим (Ctrl-v) удобен для правки колонок:
" Ctrl-v, выдели колонку вниз (j), I — вставь текст, Esc — применится ко всем строкам

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

Команда :s (substitute) в командном режиме. Синтаксис: :[диапазон]s/что/на_что/флаги.

:s/old/new/         " заменить ПЕРВОЕ «old» на «new» в текущей строке
:s/old/new/g        " заменить ВСЕ «old» в текущей строке (флаг g = global)
:%s/old/new/g       " заменить во всём файле (% = все строки)
:%s/old/new/gc      " то же, но с подтверждением каждой замены (c = confirm)
:%s/old/new/gi      " регистронезависимо (i = ignore case)

:10,20s/old/new/g   " заменить только в строках 10–20
:'<,'>s/old/new/g    " заменить в текущем визуальном выделении
:%s/\s\+$//         " удалить хвостовые пробелы во всём файле

10. Несколько файлов и окна

Vim держит открытые файлы в буферах и может делить экран на окна и вкладки.

:e file2.txt    " открыть (edit) другой файл в текущем окне
:ls             " список открытых буферов
:bn             " следующий буфер (buffer next)
:bp             " предыдущий буфер
:b 2            " перейти к буферу №2
:bd             " закрыть текущий буфер

:sp file        " split: горизонтальное разделение окна
:vsp file       " vertical split: вертикальное разделение
Ctrl-w w        " переключиться на следующее окно
Ctrl-w h/j/k/l  " перейти в окно слева/снизу/сверху/справа
Ctrl-w q        " закрыть текущее окно

:tabnew file    " открыть файл в новой вкладке (табе)
gt              " следующая вкладка
gT              " предыдущая вкладка
:tabclose       " закрыть вкладку

11. Полезное

Три приёма, ради которых Vim и любят: повтор, макросы и собственный конфиг.

.               " повторить последнее изменение (самая полезная клавиша Vim)

" Макросы — запись последовательности действий:
qa              " начать запись макроса в регистр a
" ...выполняешь любые команды...
q               " остановить запись
@a              " проиграть макрос a
@@              " повторить последний проигранный макрос
5@a             " проиграть макрос a пять раз

" Маркеры — закладки в файле:
ma              " поставить маркер a в текущей позиции
`a              " прыгнуть точно на маркер a
''              " вернуться туда, где был до прыжка

Базовый ~/.vimrc — файл настроек, который читается при запуске:

set number          " показывать номера строк
set relativenumber  " относительные номера (удобно для 5j, 3dd и т.п.)
set tabstop=4       " ширина табуляции — 4 пробела
set shiftwidth=4    " размер отступа для > и <
set expandtab       " заменять табы пробелами
set ignorecase      " поиск без учёта регистра
set hlsearch        " подсвечивать результаты поиска
set incsearch       " подсветка по мере набора запроса
syntax on           " подсветка синтаксиса

Официальный сайт Vim и команда :help внутри редактора — главные справочники. А vimtutor в терминале закрепит всё это руками за полчаса.

Поддержать проект