# Vim

> Модальный текстовый редактор для терминала, наследник vi; редактирование командами-«предложениями» из операторов и движений. Neovim — его современный форк.

Источник: https://llmdocs.ru/wiki/vim/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Полное название**: 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](https://llmdocs.ru/wiki/linux.md), поэтому базовые навыки работы с ним — часть грамотности системного администратора.

## История

Редактор **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` возвращает.

## Полезные команды

```vim
:%s/old/new/gc        " заменить во всём файле с подтверждением
:g/DEBUG/d            " удалить все строки с DEBUG
:sort u               " отсортировать строки и убрать дубли
:e file.txt           " открыть файл
:vsplit other.py      " вертикальное деление окна
:set number           " номера строк
qa ... q, затем @a    " записать и воспроизвести макрос
```

Поиск — `/шаблон`, следующий результат — `n`. Шаблоны — регулярные выражения со своими особенностями синтаксиса (см. [grep и регулярные выражения](https://llmdocs.ru/wiki/grep.md)); ключ `\v` («very magic») делает их ближе к привычным расширенным регэкспам.

## Настройка

Минимальный `~/.vimrc`:

```vim
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](https://llmdocs.ru/wiki/shell-bash.md) и `bindkey -v` в [Zsh](https://llmdocs.ru/wiki/zsh.md), режим копирования в [tmux](https://llmdocs.ru/wiki/tmux.md), утилиты `less` и `man` (навигация `j`/`k`, поиск `/`). Встроенный учебник запускается командой `vimtutor` и занимает около получаса. Встроенная справка открывается командой `:help` и по объёму сопоставима с книгой: например, `:help text-objects` описывает все текстовые объекты, а `:help usr_toc` — оглавление пользовательского руководства. Поскольку vi входит в стандарт POSIX, минимальные навыки — вставка, сохранение, поиск и выход — пригодятся на любом сервере, даже если основным редактором остаётся графическая IDE.

## См. также

- [Linux](https://llmdocs.ru/wiki/linux.md)
- [tmux](https://llmdocs.ru/wiki/tmux.md)
- [man-страницы](https://llmdocs.ru/wiki/man-pages.md)
- [grep и регулярные выражения](https://llmdocs.ru/wiki/grep.md)

## Источники

1. [Vim — официальный сайт](https://www.vim.org/)
2. [Vim documentation (vimhelp.org)](https://vimhelp.org/)
3. [Neovim — официальный сайт](https://neovim.io/)
4. [POSIX — vi utility](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/vi.html)
5. [Vim repository on GitHub](https://github.com/vim/vim)
