🖥️ Vi и Vim: редактор, который живёт вечно

Автор: Raven2000 , 26 апреля 2026
VIM

Я работаю с vi и vim уже больше двадцати лет. Когда в 2006 году ты впервые открываешь консоль FreeBSD с диска из журнала «Хакер» — первое, что ты встречаешь, это vi. И либо ты с ним подружишься, либо будешь бояться всю жизнь. Я подружился. И до сих пор считаю vim одним из самых продуктивных инструментов в арсенале любого системного администратора и разработчика.


Что такое vi

Vi (Visual Interface) появился в 1976 году — Билл Джой написал его для Unix как визуальный интерфейс поверх строкового редактора ex. Это минималистичный, легковесный редактор, который есть в каждой UNIX-системе без исключения. На FreeBSD, OpenBSD, любом embedded Linux — vi всегда там. Именно поэтому его знание обязательно: когда у тебя нет ничего, кроме голой системы, vi есть всегда.

Vi работает в двух режимах: командный (перемещение, удаление, поиск) и режим вставки (набор текста). Никакой мыши, никаких меню — только клавиатура и логика.


Vim — VI, которому дали поработать в полную силу

Vim (Vi IMproved) создал Брам Мооленаар в 1991 году как расширенную версию vi. Внешне они похожи, но под капотом Vim — совсем другой инструмент. Главные отличия:

ВозможностьViVim
Синтаксическая подсветкаНетДа
Множественный undo/redoНет (только 1 шаг)Да (дерево отмен)
Визуальный режим (выделение)НетДа
ПлагиныНетДа
Буферы и вкладкиОграниченыПолноценные
Скриптинг (Vimscript)НетДа
Встроенный spell-checkНетДа
Графический режим (GVim)НетДа

На практике: на продакшн-серверах без пакетов ты используешь vi, а на своей рабочей машине и серверах под управлением — vim. Это разумное разделение.


Режимы — основа основ

Главное, что нужно понять в vi/vim: редактор всегда находится в одном из режимов. Большинство новичков паникуют именно потому, что не понимают, в каком режиме находятся.

┌──────────────────────────────────────────────┐
│  NORMAL (командный)   ◄──── ESC ─────────────┤
│       │                                      │
│    i / a / o                                 │
│       │                                      │
│       ▼                                      │
│  INSERT (вставка)                            │
│                                              │
│    v / V / Ctrl+V  (из NORMAL)               │
│       ▼                                      │
│  VISUAL (выделение)                          │
│                                              │
│    :  (из NORMAL)                            │
│       ▼                                      │
│  COMMAND LINE (:w, :q, :s/…/…/)              │
└──────────────────────────────────────────────┘

Золотое правило: не знаешь, где ты — нажми ESC (можно несколько раз). Всегда вернёт в нормальный режим.


Шпаргалка: команды которые использую каждый день

Открытие и выход

КомандаДействие
vi filenameОткрыть файл
:wСохранить
:qВыйти
:wq или ZZСохранить и выйти
:q!Выйти без сохранения
:w !sudo tee %Сохранить файл с правами root (если открыл без sudo)

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

КомандаДействие
iВставка перед курсором
aВставка после курсора
IВставка в начало строки
AВставка в конец строки
oНовая строка ниже
OНовая строка выше

Навигация (командный режим)

КомандаДействие
h j k l←↓↑→ (классика)
w / bСледующее / предыдущее слово
0 / $Начало / конец строки
gg / GНачало / конец файла
:42Перейти на строку 42
Ctrl+F / Ctrl+BСтраница вперёд / назад
%Прыжок к парной скобке ( ) [ ] { }

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

КомандаДействие
xУдалить символ под курсором
ddУдалить строку (и в буфер)
dwУдалить слово
DУдалить до конца строки
yyСкопировать строку
ywСкопировать слово
p / PВставить после / до курсора
uОтменить последнее действие
Ctrl+RПовторить (redo, только Vim)
.Повторить последнюю команду — магия!
ciwУдалить слово и войти в insert (change inner word)
ci"Удалить содержимое кавычек и войти в insert

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

КомандаДействие
/словоПоиск вперёд
?словоПоиск назад
n / NСледующее / предыдущее совпадение
:%s/old/new/gЗаменить всё в файле
:%s/old/new/gcЗаменить с подтверждением каждой замены
:5,20s/old/new/gЗаменить в строках 5–20
*Поиск слова под курсором

Визуальный режим (только Vim)

КомандаДействие
vВыделение посимвольно
VВыделение построчно
Ctrl+VБлочное выделение (колонки!)
> / <Отступ вправо / влево для выделенного
y / dСкопировать / удалить выделенное

Настройка ~/.vimrc — делаем Vim удобным

Хороший .vimrc — это как хороший /etc/rc.conf: один раз написал, годами пользуешься. Мой минимальный конфиг для комфортной работы:

" Основные настройки
set nocompatible          " Отключить совместимость с vi (включает все фичи Vim)
set number                " Нумерация строк
set relativenumber        " Относительная нумерация — удобно для команд типа 5dd
set cursorline            " Подсветка текущей строки
set scrolloff=5           " Всегда 5 строк выше/ниже курсора

" Поиск
set hlsearch              " Подсветка результатов поиска
set incsearch             " Поиск по мере набора
set ignorecase            " Регистронезависимый поиск
set smartcase             " Но если есть заглавная — учитывать регистр

" Редактирование
set tabstop=4             " Ширина таба
set shiftwidth=4          " Ширина отступа
set expandtab             " Табы → пробелы
set autoindent            " Автоотступы

" Интерфейс
set showcmd               " Показывать команду в строке состояния
set showmatch             " Подсветка парных скобок
set ruler                 " Позиция курсора в строке состояния
set wildmenu              " Автодополнение команд через Tab
set laststatus=2          " Всегда показывать строку состояния

" Синтаксис и цвета
syntax on
set background=dark

" Отключить .swp файлы в текущей директории
set backupdir=/tmp
set directory=/tmp

" Удобный выход из insert режима
inoremap jj <Esc>

Последняя строка — личный лайфхак: jj в режиме вставки мгновенно возвращает в нормальный режим. Пальцы не тянутся в угол клавиатуры к ESC.


Продвинутые приёмы, которые меняют жизнь

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

qa        — начать запись макроса в регистр 'a'
<команды> — всё что делаешь записывается
q         — остановить запись
10@a      — воспроизвести макрос 'a' 10 раз

Множественные окна:

:split filename   — горизонтальный сплит
:vsplit filename  — вертикальный сплит
Ctrl+W W          — переключение между окнами
Ctrl+W =          — выровнять окна

Запуск shell-команды прямо из Vim:

:!ls -la          — выполнить команду
:r !date          — вставить вывод команды в файл
:%!sort           — пропустить весь файл через sort

Вкладки:

:tabnew filename  — новая вкладка
gt / gT           — следующая / предыдущая вкладка
:tabclose         — закрыть вкладку

Vi или Vim — что использовать

На FreeBSD vi из базовой системы — это nvi (New Vi), облегчённая и стабильная реализация. Для повседневной работы с конфигами и скриптами этого более чем достаточно. Vim устанавливается отдельно:

# FreeBSD
pkg install vim

# Сделать vim редактором по умолчанию
echo 'export EDITOR=vim' >> ~/.profile

Если ты работаешь с кодом, конфигами объёмом больше нескольких десятков строк, пишешь скрипты или статьи — ставь Vim. Если ты на чужом сервере или в минимальном окружении — vi всегда есть и этого хватит.

Двадцать лет назад vi казался сложным. Сегодня я не представляю работу без него. Это не инструмент — это язык, который ты выучиваешь один раз и используешь везде.

Теги

Комментарии