Vim

Материал из llmdocs — справочник разработчика
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.

См. также

Источники

  1. Vim — официальный сайт
  2. Vim documentation (vimhelp.org)
  3. Neovim — официальный сайт
  4. POSIX — vi utility
  5. Vim repository on GitHub