ITcompressor IT — сжато и по делу
← Назад к статьям

Vim

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, а многие плагины из списка работают в обоих редакторах без изменений.

← Назад к статьям