Vim — модальный текстовый редактор, развитая версия классического vi: доступен практически в любой Unix-системе, не тратит руки на мышь и после освоения ощутимо ускоряет правку кода и конфигов.
Режимы работы#
Вся фишка Vim — в режимах: одна и та же клавиша значит разное, смотря в каком режиме вы находитесь.
- Normal — навигация и команды; Vim всегда стартует здесь
- Insert — ввод текста (попасть:
i/a/o, выйти:Esc) - Visual — выделение текста (попасть:
v/V/Ctrl+v) - Command-line — команды с двоеточием (
:w,:q,:%s/…/…/)
Навигация#
| Клавиши | Что делают |
|---|---|
h j k l |
влево, вниз, вверх, вправо |
w / b |
следующее / предыдущее слово |
0 / $ |
начало / конец строки |
gg / G |
начало / конец файла |
{ / } |
предыдущий / следующий абзац |
Ctrl+d / Ctrl+u |
полстраницы вниз / вверх |
Редактирование#
i — вставка перед курсором a — вставка после курсора
I — вставка в начало строки A — вставка в конец строки
o — новая строка ниже O — новая строка выше
x — удалить символ r — заменить один символ
dd — удалить строку dw — удалить слово
yy — скопировать (yank) строку yw — скопировать слово
p — вставить после курсора P — вставить перед курсором
u — отменить Ctrl+r — вернуть отменённое
ci" — изменить содержимое в кавычках ci( — в скобках (важный паттерн «c» + объект)
Комбинация «оператор + текстовый объект» работает и с другими операторами:
di(— удалить содержимое скобок,daw— удалить слово вместе с пробелом вокруг,dd— оператор удаления на целую строку.
Визуальный режим#
Выделение, затем оператор — так работают массовые правки:
v — посимвольное выделение V — построчное выделение
Ctrl+v — блочное выделение (колонна)
y — скопировать выделенное d — вырезать
> / < — сдвиг выделенного вправо / влево
u / U — выделенное в нижний / верхний регистр
Классика блочного выделения: Ctrl+v, спуститься курсором по столбцу,
I — ввод текста, Esc — текст появится на каждой строке выделения.
Поиск и замена#
/pattern — поиск вперёд (n — следующее совпадение, N — предыдущее)
?pattern — поиск назад
:s/old/new/ — замена первого совпадения в строке
:s/old/new/g — замена в текущей строке (все совпадения)
:%s/old/new/g — замена во всём файле
:%s/old/new/gc — то же, с подтверждением каждого совпадения
Сохранение и выход#
| Команда | Что делает |
|---|---|
:w |
сохранить |
:q |
выйти |
:wq / ZZ |
сохранить и выйти |
:q! |
выйти без保存 (частый гость новичка) |
:w file.txt |
сохранить в другой файл |
Забыли открыть файл под sudo, а он не сохраняется? Внутри Vim:
:w !sudo tee %— файл перезапишется с правами root.
Настройка: ~/.vimrc#
" Нумерация строк
set number
" Подсветка синтаксиса
syntax on
" Автоотступы
set autoindent
set smartindent
" Табы и пробелы
set tabstop=4
set shiftwidth=4
set expandtab
" Поиск: без учёта регистра, но с ним — если есть заглавные в запросе
set ignorecase
set smartcase
" Подсветка совпадений поиска
set hlsearch
Плагины (vim-plug)#
Менеджер плагинов — один файл-автозагрузка:
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
Список плагинов в ~/.vimrc:
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-fugitive' " Git внутри Vim
Plug 'airblade/vim-gitgutter' " Знаки изменённых строк
Plug 'vim-airline/vim-airline' " Статусная строка
call plug#end()
Установка — из редактора после перезапуска: :PlugInstall.
Neovim — современный форк с той же моделью редактирования; конфиг там живёт в
~/.config/nvim/init.vim, а многие плагины из списка работают в обоих редакторах без изменений.