Vim
| Полное название | Vi IMproved |
|---|---|
| Автор | Брам Моленар (Bram Moolenaar) |
| Первый выпуск | 1991 |
| Предшественник | vi (Билл Джой, 1976) |
| Язык | C, Vim script |
| Лицензия | Vim License (совместима с GPL) |
| Форк | Neovim (2014, Lua) |
| Файл настройки | ~/.vimrc (Neovim — ~/.config/nvim/init.lua) |
Vim (Vi IMproved) — текстовый редактор для терминала, расширенная версия классического Unix-редактора vi. Главная черта Vim — модальность: в одном режиме клавиши вводят текст, в другом — работают как команды. Это позволяет редактировать текст без мыши и без длинных сочетаний с Ctrl, комбинируя короткие команды. Vim или совместимый vi есть практически на любом сервере с Linux, поэтому базовые навыки работы с ним — часть грамотности системного администратора.
История
Редактор vi написал Билл Джой в 1976 году для BSD Unix; он вошёл в стандарт POSIX.[4] В 1991 году голландский программист Брам Моленар выпустил Vim для компьютера Amiga, и редактор быстро стал стандартом де-факто на Unix-системах. Моленар руководил проектом более тридцати лет; после его смерти в 2023 году разработку продолжает команда мейнтейнеров на GitHub.[5] Vim распространяется как «charityware»: автор просил жертвовать детям в Уганде.[1]
В 2014 году появился форк Neovim — с асинхронной архитектурой, встроенным Lua, клиентом LSP и tree-sitter для подсветки синтаксиса.[3] Сегодня Vim и Neovim развиваются параллельно.
Режимы
| Режим | Как войти | Назначение |
|---|---|---|
| Normal | Esc |
навигация и команды (основной) |
| Insert | i, a, o |
ввод текста |
| Visual | v, V, Ctrl+v |
выделение символов, строк, блока |
| Command-line | : |
команды Ex: сохранение, замена, настройки |
| Replace | R |
перезапись поверх текста |
Знаменитый вопрос «как выйти из Vim» решается так: Esc, затем :q (выйти), :wq (сохранить и выйти) или :q! (выйти без сохранения).
Язык команд
Команды Normal-режима складываются по схеме [число] оператор движение, как фразы:[2]
- Операторы:
d— удалить,c— изменить,y— скопировать,>— сдвинуть,gU— в верхний регистр. - Движения:
w— слово,$— конец строки,}— абзац,gg/G— начало/конец файла,f,— до запятой. - Текстовые объекты:
iw— слово,i"— внутри кавычек,ap— абзац,it— внутри тега.
Отсюда: d3w — удалить три слова, ci" — заменить текст в кавычках, yap — скопировать абзац. Команда . повторяет последнее изменение, u отменяет, Ctrl+r возвращает.
Полезные команды
:%s/old/new/gc " заменить во всём файле с подтверждением
:g/DEBUG/d " удалить все строки с DEBUG
:sort u " отсортировать строки и убрать дубли
:e file.txt " открыть файл
:vsplit other.py " вертикальное деление окна
:set number " номера строк
qa ... q, затем @a " записать и воспроизвести макрос
Поиск — /шаблон, следующий результат — n. Шаблоны — регулярные выражения со своими особенностями синтаксиса (см. grep и регулярные выражения); ключ \v («very magic») делает их ближе к привычным расширенным регэкспам.
Настройка
Минимальный ~/.vimrc:
syntax on
set number relativenumber
set expandtab shiftwidth=4 tabstop=4
set ignorecase smartcase incsearch hlsearch
set clipboard=unnamedplus
Плагины ставятся менеджерами vim-plug или встроенными пакетами (:help packages). В Neovim конфигурацию пишут на Lua, а дистрибутивы вроде LazyVim и kickstart.nvim дают готовую IDE-подобную сборку с LSP, автодополнением и поиском по файлам.
Vim вне Vim
Модальные клавиши Vim поддерживают многие программы: расширения для VS Code и JetBrains, режим set -o vi в Bash и bindkey -v в Zsh, режим копирования в tmux, утилиты less и man (навигация j/k, поиск /). Встроенный учебник запускается командой vimtutor и занимает около получаса. Встроенная справка открывается командой :help и по объёму сопоставима с книгой: например, :help text-objects описывает все текстовые объекты, а :help usr_toc — оглавление пользовательского руководства. Поскольку vi входит в стандарт POSIX, минимальные навыки — вставка, сохранение, поиск и выход — пригодятся на любом сервере, даже если основным редактором остаётся графическая IDE.