Шпаргалка-справочник: все ключевые команды одним списком

Рейтинг: 79.6% · 15 голосов
Исчерпывающий курс по Vim и Neovim: модальное редактирование и грамматика (операторы, движения, текстовые объекты, точка-команда), регистры, метки, макросы, поиск и :substitute, :global, буферы/окна/quickfix, визуальный режим, конфигурация на Lua, маппинги, плагины (lazy.nvim), LSP, автодополнение (blink.cmp), Treesitter, fuzzy-поиск, Git, эргономика и антипаттерны. 34 главы, актуально на 2026 (Vim 9.1, Neovim 0.11/0.12).
Ответить
Аватара пользователя
Roman_Vim
Сообщения: 34
Зарегистрирован: 11 май 2026, 05:31

Шпаргалка-справочник: все ключевые команды одним списком

Сообщение Roman_Vim »

Оглавление курса (34)
  1. Философия Vim: модальное редактирование и почему это актуально в 2026
  2. Установка и выживание: первый запуск, режимы, как выйти
  3. Перемещение по тексту: движения как основа эффективности
  4. Базовое редактирование: вставка, удаление, копирование
  5. Грамматика Vim: операторы + движения = команды
  6. Текстовые объекты: оперируем структурой, а не символами
  7. Точка-команда и повторяемость: "один штрих, чтобы повторить"
  8. Регистры: продвинутая работа с буфером обмена
  9. Метки и прыжки: навигация по истории перемещений
  10. Поиск: /, ?, *, # и магия паттернов
  11. Замена :substitute и регулярные выражения Vim
  12. Команда :global - оружие массового редактирования
  13. Буферы, окна и вкладки: организация рабочего пространства
  14. Quickfix и location list: пакетная работа по всему проекту
  15. Навигация по файлам: netrw, fuzzy-поиск и проекты
  16. Макросы: автоматизация повторяющихся правок
  17. Визуальный режим и блочное редактирование
  18. Трюки режима вставки
  19. Свёртки, автодополнение и аббревиатуры (встроенные)
  20. Конфигурация с нуля: init.lua и разумные дефолты 2026
  21. Маппинги: leader, which-key и здравые привычки
  22. Скриптинг: основы Vimscript и Lua для Neovim
  23. Менеджеры плагинов: lazy.nvim и lazy-loading
  24. Neovim в 2026: чем отличается и почему выбирают
  25. LSP в Neovim: умные возможности языка
  26. Автодополнение 2026: blink.cmp против nvim-cmp
  27. Treesitter: точная подсветка и структурное редактирование
  28. Fuzzy-поиск: Telescope, fzf-lua и snacks.picker
  29. Git внутри редактора: fugitive, gitsigns и lazygit
  30. Дистрибутивы, отладка и терминал: быстрый старт и интеграции
  31. Vim повсюду: IDE, браузер и shell
  32. Эргономика и антипаттерны: как не навредить себе и не застрять
  33. Рабочие рецепты, тренажёры и план обучения
  34. Шпаргалка-справочник: все ключевые команды одним списком (вы здесь)
Зачем нужна эта глава

Вы прошли тридцать три главы: от философии модального редактирования до LSP, Treesitter и git внутри редактора. Знание разрослось, и в какой-то момент мозг перестаёт держать всё сразу. Эта глава - не учебник, а рабочий справочник: плотный набор таблиц, к которому вы будете возвращаться, когда забыли точный синтаксис :cfdo, перепутали \zs с \ze или не помните, какой регистр хранит последний yank.

Главная идея, которую стоит унести из всего курса и которую эта шпаргалка лишь систематизирует: Vim - это грамматика, а не словарь. Вы не запоминаете тысячи готовых сочетаний - вы комбинируете небольшой набор операторов с движениями и текстовыми объектами. Запомнив N движений и M операторов, вы получаете N x M команд. Поэтому таблицы ниже структурированы по этому принципу: отдельно операторы (глаголы), отдельно движения и объекты (существительные), а вы соединяете их на лету.

Команды даны в семантически корректном виде. Там, где фича специфична для Neovim или Vim 9 - это отмечено явно. Подробные объяснения "почему" вынесены в соответствующие главы курса; здесь - концентрат для быстрого обращения.

Грамматика: оператор + объект

Любая команда редактирования читается как "глагол + существительное": d (delete) + iw (inner word) = diw. Это композиционное ядро всего Vim. Подробнее - главы 5 и 6.

Операторы (глаголы)

Код: Выделить всё

Команда  |  Действие
---------+------------------------------------------------------
d        |  удалить (delete)
c        |  изменить - удалить и войти в insert (change)
y        |  скопировать в регистр (yank)
> <      |  сдвинуть отступ вправо / влево
=        |  автоотступ (по equalprg/Treesitter/LSP)
gU gu    |  в верхний / нижний регистр
g~       |  инвертировать регистр
gq gw    |  переформатировать по textwidth (gw сохраняет курсор)
!        |  прогнать через внешнюю команду (filter)
gc       |  закомментировать (встроено в Neovim 0.10+)
Правило удвоения: оператор, набранный дважды (dd, yy, cc, >>), действует на всю строку.

Counts (множители)

Счётчик - это множитель. 3dd удаляет 3 строки, 2d3w удаляет 6 слов (счётчики перемножаются: 3d2w == d6w). Count работает и с объектами по-разному: для парных объектов он расширяет захват наружу - 2di( удаляет содержимое 2-й объемлющей пары скобок (нативно, см. :help ib). Это поведение Vim из коробки, плагины не нужны.
В своих маппингах используйте v:count1 (даёт 1, когда счётчик не задан), а не v:count (даёт 0) - иначе при вызове без префикса действие сломается. Подробнее в главе 22.
Движения (motions)

Движение задаёт, куда дотянется оператор. Подробно - глава 3.

Код: Выделить всё

Клавиша        |  Движение
---------------+------------------------------------------------------------
h j k l        |  влево / вниз / вверх / вправо
w W            |  вперёд к началу слова / WORD
e E            |  вперёд к концу слова / WORD
b B            |  назад к началу слова / WORD
ge gE          |  назад к концу слова
0 ^ $          |  начало строки / первый непробел / конец строки
g_             |  последний непробельный символ строки
f{c} F{c}      |  к символу {c} вперёд / назад (курсор на нём)
t{c} T{c}      |  до символа {c} вперёд / назад (курсор перед ним)
; ,            |  повторить последний f/t/F/T вперёд / назад
{ }            |  предыдущий / следующий абзац (пустая строка)
( )            |  предыдущее / следующее предложение
%              |  к парной скобке ()[]{}
gg G           |  начало / конец файла
{n}G или :{n}  |  к строке n
H M L          |  верх / середина / низ видимого экрана
Ctrl-d Ctrl-u  |  полэкрана вниз / вверх
Ctrl-f Ctrl-b  |  страница вперёд / назад
zz zt zb       |  прокрутить так, чтобы курсор был в центре / сверху / снизу
Текстовые объекты (text objects)

Объекты курсор-независимы и идеально дружат с dot-repeat (.). Пара i (inner, внутри) и a (around, включая ограничители). Подробно - глава 6.

Код: Выделить всё

Объект             |  Что выделяет
-------------------+------------------------------------
iw / aw            |  слово / слово с пробелом
iW / aW            |  WORD / WORD с пробелом
is / as            |  предложение
ip / ap            |  абзац
i( i) ib / a(...   |  внутри скобок / со скобками
i{ i} iB / a{...   |  внутри фигурных / с фигурными
i[ i] / a[ a]      |  внутри квадратных
i< i> / a< a>      |  внутри угловых
i" i'  i  / a"...  |  внутри кавычек / с кавычками
it / at            |  содержимое HTML/XML-тега / с тегом
Примеры композиции (выводятся "на лету", без заучивания):

Код: Выделить всё

ci(    изменить содержимое скобок
da{    удалить блок вместе с фигурными скобками
yi"    скопировать содержимое кавычек
gUiw   uppercase слова под курсором
dit    удалить содержимое тега
cap    переписать абзац
В Neovim 2026 объекты расширяются плагином mini.ai: добавляет варианты "следующий/предыдущий/последний" - in/an (inner/around next), il/al (last), а опция search_method управляет тем, какой объект выбирать (ближайший/следующий/предыдущий, 'cover_or_next' и т.п.). Для AST-точности (функция, класс, параметр) - nvim-treesitter-textobjects (af/if, ac/ic). Подробнее - главы 6 и 27.
Точка-команда и повторяемость

Код: Выделить всё

Команда                    |  Действие
---------------------------+-----------------------------------------------------------------------------------------------------------------------------------
.                          |  повторить последнее изменение
u / Ctrl-r                 |  undo / redo
U                          |  отменить все правки на строке
&                          |  повторить последнюю :s на строке
@:                         |  повторить последнюю команду :
g- g+                      |  перемещение по дереву undo по состояниям
:earlier {N} / :later {N}  |  навигация по дереву undo по времени: :earlier 10m (10 минут назад), :later 1h; также {N}f (по файловым записям), {N} (по правкам)
:earlier/:later особенно удобны с undofile (persistent undo): после переоткрытия файла можно "отмотать" состояние на N минут/часов назад, даже не зная числа шагов.
Принцип: предпочитайте text objects (ciw) motion-командам (cw) - . ведёт себя предсказуемо, потому что объект не зависит от позиции курсора. Подробно - глава 7.

Регистры

Регистр - именованный буфер обмена. Префикс "{reg} перед операцией. Подробно - глава 8.

Код: Выделить всё

Регистр  |  Содержимое
---------+--------------------------------------------------
"        |  unnamed - последний yank/delete
0        |  только последний yank (не затирается удалениями)
1-9      |  история удалений (1 - самое свежее)
a-z      |  именованные (заглавные A-Z - дописывают)
+ *      |  системный буфер обмена
_        |  blackhole - "чёрная дыра", ничего не сохраняет
%        |  имя текущего файла
:        |  последняя :-команда
/        |  последний поисковый паттерн
=        |  regex-выражение ("=2+2<CR>p)
.        |  последний вставленный текст
Операции с регистрами:

Код: Выделить всё

"ayy    скопировать строку в регистр a
"ap     вставить из регистра a
"+y     скопировать в системный буфер
"_d     удалить без засорения регистров
Ctrl-r a   (в insert/cmdline) вставить регистр a
Классический рецепт "заменить слово, не теряя буфер":

Код: Выделить всё

было:    foo bar   (нужно заменить bar на содержимое буфера)
yiw на foo -> "0p поверх bar (через viw"0p), либо vnoremap <leader>p "_dP
Neovim 0.10+: при работе по SSH OSC52 включается автоматически, если опция clipboard НЕ задана. Выставление clipboard=unnamedplus глушит авто-OSC52. Для удалёнки лучше оставить clipboard пустым и пользоваться явными "+y/"+p. Подробнее - глава 8.
Метки и прыжки

Подробно - глава 9.

Код: Выделить всё

Команда            |  Действие
-------------------+------------------------------------------------
m{a-z}             |  поставить метку в буфере (локальная)
m{A-Z}             |  глобальная метка (между файлами, в shada)
{m}                |  прыгнуть на позицию метки
'{m}               |  прыгнуть на строку метки
/ ''               |  назад к позиции до последнего прыжка
.  /  ^            |  последнее изменение / позиция выхода из insert
dm{x}              |  удалить метку (:delmarks)
Ctrl-o / Ctrl-i    |  назад / вперёд по jumplist
g; / g,            |  назад / вперёд по changelist
:jumps / :changes  |  показать списки
Neovim: vim.o.jumpoptions = 'stack,view' - stack делает jumplist как tag-стек (хвост отбрасывается при прыжке из середины), view восстанавливает положение окна. Заглавные метки A-Z - лёгкая нативная замена Harpoon для закладок по файлам проекта.
Поиск

Подробно - глава 10.

Код: Выделить всё

Команда    |  Действие
-----------+----------------------------------------------------------------------------
/pat ?pat  |  поиск вперёд / назад
n N        |  следующее / предыдущее совпадение
* #        |  искать слово под курсором вперёд / назад
g* g#      |  то же, но без границ слова
gd gD      |  к локальному / глобальному объявлению переменной (текстовый поиск, не LSP)
gn gN      |  выделить следующее совпадение last search
Регулярки - режимы "магии". Начинайте нетривиальный паттерн с \v (very magic), в скриптах режим фиксируйте обязательно:

Код: Выделить всё

Префикс  |  Режим
---------+----------------------------------------------------+-------
\v       |  very magic - PCRE-подобный, ()/{}/+/?/            |  без \
\m       |  magic (дефолт)
\M       |  nomagic
\V       |  very nomagic - почти литерал (пути, спецсимволы)
Позиционные совпадения - через \zs / \ze (быстрее и читабельнее, чем lookaround \@=/\@<=):

Код: Выделить всё

/foo \zsbar\ze baz   найдёт только "bar", окружённое foo и baz
Замена :substitute

Подробно - глава 11.

Код: Выделить всё

:[range]s/pat/repl/[flags]

Код: Выделить всё

Часть       |  Значение
------------+-------------------------------------------
range       |  % весь файл, '<,'> выделение, 5,20 строки
Флаг g      |  все вхождения в строке
Флаг c      |  подтверждать каждое
Флаг i / I  |  игнорировать / учитывать регистр
Флаг e      |  не ругаться, если паттерн не найден
& или \0    |  всё совпадение в замене
\1-\9       |  ссылки на группы
\u \U..\E   |  следующий / диапазон в верхний регистр
\l \L..\E   |  в нижний регистр
\=expr      |  замена выражением (submatch(n))
Примеры:

Код: Выделить всё

:%s/\v(\w+) (\w+)/\2 \1/g     поменять местами пары слов
:%s/\v(\d+)/\=submatch(1)*2/g удвоить все числа
:'<,'>s/foo/bar/g             заменить в выделении
Альтернатива :%s/.../gc для выборочной правки - cgn + .:

Код: Выделить всё

*       задать паттерн словом под курсором
cgn     изменить следующее совпадение
.       повторить для следующего (пропустить - n)
Neovim: set inccommand=split даёт живой предпросмотр :s по мере набора, открывая превью-окно с off-screen совпадениями. Это Neovim-специфичная фича, в классическом Vim её нет.
Команда :global

:g - движок пакетного редактирования. Подробно - глава 12.

Код: Выделить всё

:[range]g/pat/cmd     выполнить cmd на строках, совпавших с pat
:[range]g!/pat/cmd    (= :v) на НЕ совпавших

Код: Выделить всё

Рецепт            |  Действие
------------------+----------------------------------
:g/pat/d          |  удалить совпавшие строки
:v/pat/d          |  удалить все, кроме совпавших
:g/pat/m$         |  собрать совпадения в конец файла
:g/pat/t.         |  продублировать совпавшие строки
:g/pat/normal @q  |  прогнать макрос q по совпадениям
:g/pat/s/x/y/g    |  заменить только в нужных строках
Сортировка :sort

:sort - базовый инструмент массового редактирования, соседствует с :g и :s. Подробно - глава 12.

Код: Выделить всё

:[range]sort[!] [flags] [/pat/]

Код: Выделить всё

Форма          |  Действие
---------------+------------------------------------------------------------------
:sort          |  сортировать строки (range, по умолчанию весь файл)
:sort!         |  в обратном порядке
:sort u        |  сортировать и убрать дубли (unique)
:sort n        |  числовая сортировка (по первому числу в строке)
:sort i        |  без учёта регистра
:sort /pat/    |  сортировать по тексту после совпадения pat (ключ - хвост строки)
:sort /pat/ r  |  сортировать по самому pat (ключ - совпадение)
:'<,'>sort     |  сортировать только выделенные строки
Пример: :sort /,/ n - сортировать CSV-строки численно по второму столбцу (всё после первой запятой).

Буферы, окна, вкладки

Подробно - глава 13.

Буферы

Код: Выделить всё

Команда         |  Действие
----------------+-----------------------------------------
:e file         |  открыть файл
:ls / :buffers  |  список буферов
:b {n/name}     |  переключиться на буфер
:bn :bp         |  следующий / предыдущий
:bd             |  закрыть буфер
Ctrl-^          |  переключиться на "альтернативный" буфер
Окна

Код: Выделить всё

Команда              |  Действие
---------------------+---------------------------------------+---------------------------------
Ctrl-w s / Ctrl-w v  |  split горизонтальный / вертикальный
Ctrl-w h/j/k/l       |  переход между окнами
Ctrl-w q / Ctrl-w o  |  закрыть / оставить только текущее
Ctrl-w =             |  уравнять размеры
Ctrl-w _ / Ctrl-w \  |                                       |  максимизировать высоту / ширину
Ctrl-w +/-/</>       |  изменить размер
Ctrl-w r / Ctrl-w x  |  повернуть / поменять окна
Вкладки

Код: Выделить всё

Команда               |  Действие
----------------------+-------------------------
:tabnew               |  новая вкладка
gt / gT               |  следующая / предыдущая
{n}gt                 |  к вкладке n
:tabclose / :tabonly  |  закрыть / оставить одну
Сохранение и выход

Базовые команды записи/чтения файлов в командном режиме. Подробно - глава 13.

Код: Выделить всё

Команда       |  Действие
--------------+---------------------------------------------------
:w            |  записать текущий буфер
:w file       |  записать в указанный файл
:saveas file  |  записать как и переключить буфер на новое имя
:wq / :x      |  записать и выйти (:x пишет только при изменениях)
:wa           |  записать все изменённые буферы
:wqa / :xa    |  записать все и выйти
:q / :q!      |  выйти / выйти без сохранения (отбросить правки)
:qa / :qa!    |  закрыть все окна / выйти без сохранения всего
ZZ / ZQ       |  (normal) записать и выйти / выйти без сохранения
:e!           |  перечитать файл с диска, отбросив изменения
Quickfix и location list

Подробно - глава 14.

Код: Выделить всё

Команда            |  Действие
-------------------+------------------------------------------
:copen / :cclose   |  открыть / закрыть quickfix
:cnext :cprev      |  следующая / предыдущая запись
:cfirst :clast     |  первая / последняя
:cc {n}            |  перейти к записи n
:colder / :cnewer  |  предыдущий / следующий список (история)
:cdo {cmd}         |  команда на каждую запись
:cfdo {cmd}        |  команда на каждый файл
:Cfilter /pat/     |  сузить quickfix (нужен :packadd cfilter)
:grep!/:lgrep!     |  наполнить quickfix/location list поиском
Location list - те же команды с префиксом l (:lopen, :lnext, :ldo, :Lfilter).

Замена по всему проекту (обратите внимание на :cfdo, не :cdo, для s///g):

Код: Выделить всё

:grep! TODO
:copen
:cfdo s/TODO/DONE/ge | update
Настройка под ripgrep: set grepprg=rg\ --vimgrep\ --smart-case и set grepformat=%f:%l:%c:%m. Подробнее - главы 14 и 15.
Макросы

Подробно - глава 16.

Код: Выделить всё

Команда       |  Действие
--------------+----------------------------------------------
q{a-z}        |  начать запись в регистр
q             |  остановить запись
@{a-z}        |  проиграть макрос
@@            |  повторить последний макрос
{n}@a         |  проиграть n раз
qaq           |  очистить регистр a (перед рекурсией)
:put a / "ap  |  вставить макрос для редактирования как текст
Применение к диапазону через :normal - часто чище рекурсии:

Код: Выделить всё

:%normal @a              на каждую строку файла
:'<,'>normal @a          на выделение
:g/pat/normal @a         только на совпавших строках
Рекурсивный макрос "до ошибки" (регистр обязан быть пуст): qaq затем qa {действия} j @a q.

Визуальный режим

Подробно - глава 17.

Код: Выделить всё

Команда          |  Действие
-----------------+---------------------------------------------
v                |  посимвольный visual
V                |  построчный visual
Ctrl-v           |  блочный (столбцовый) visual
gv               |  восстановить прошлое выделение
o                |  переключиться на другой конец выделения
I / A (в блоке)  |  вставка перед / после блока на всех строках
r{c}             |  заменить всё выделение символом
u U ~            |  регистр выделения
:                |  начать :-команду с '<,'>
Блочное редактирование "было -> стало":

Код: Выделить всё

было (3 строки):  foo
                  bar
                  baz
Ctrl-v jj I// <Esc>
стало:            //foo
                  //bar
                  //baz
Insert-режим: трюки

Подробно - глава 18.

Код: Выделить всё

Команда          |  Действие
-----------------+-----------------------------------------------------------------------------------
i a / I A        |  вставка до/после курсора / в начале/конце строки
o O              |  новая строка ниже / выше
gi               |  вернуться в insert на месте последней правки
Ctrl-w           |  удалить слово слева
Ctrl-u           |  удалить до начала строки
Ctrl-r {reg}     |  вставить регистр
Ctrl-r =         |  вставить результат выражения
Ctrl-a / Ctrl-@  |  Ctrl-a - вставить текст последней вставки; Ctrl-@ - то же + сразу выйти из insert
Ctrl-t / Ctrl-d  |  увеличить / уменьшить отступ
Ctrl-o {cmd}     |  выполнить одну normal-команду и вернуться
Ctrl-v {code}    |  вставить символ по коду (Ctrl-v u00e9)
Ctrl-k {di}      |  digraph (Ctrl-k a: -> ä)
Ctrl-n / Ctrl-p  |  автодополнение по словам буфера
Встроенное автодополнение (Ctrl-x режим): Ctrl-x Ctrl-f (файлы), Ctrl-x Ctrl-l (строки), Ctrl-x Ctrl-o (omni/LSP). Подробно - глава 19.
Neovim 0.11+: Ctrl-s в insert вызывает signature help LSP. Neovim 0.12: опция 'autocomplete' даёт нативный insert-mode автокомплит без плагинов (экспериментально).
Свёртки (folding)

Подробно - глава 19.

Код: Выделить всё

Команда     |  Действие
------------+-----------------------------------------
za          |  переключить свёртку под курсором
zo / zc     |  открыть / закрыть свёртку
zR / zM     |  открыть / закрыть все свёртки
zr / zm     |  уменьшить / увеличить foldlevel на 1
zj / zk     |  к следующей / предыдущей свёртке
zf{motion}  |  создать свёртку (при foldmethod=manual)
zd          |  удалить свёртку
Neovim с Treesitter: foldmethod=expr, foldexpr=v:lua.vim.treesitter.foldexpr(), foldlevel=99 - структурные свёртки по AST. Подробнее - глава 27.
Ключевые опции конфига (init.lua)

Разумные дефолты 2026. Подробно - глава 20. Синтаксис Neovim Lua; в классическом Vim - set option=value в .vimrc.

Код: Выделить всё

Опция                               |  Зачем
------------------------------------+-------------------------------------------------
number + relativenumber             |  прыжки числом (8j), вместо повтора j
expandtab, shiftwidth=2, tabstop=2  |  отступы пробелами
ignorecase + smartcase              |  поиск без регистра, но чувствителен к заглавным
incsearch, hlsearch                 |  инкрементальный поиск, подсветка
scrolloff=8                         |  поля прокрутки вокруг курсора
undofile                            |  persistent undo между сессиями
signcolumn=yes                      |  колонка для git/LSP-знаков не "дёргает" текст
splitright, splitbelow              |  предсказуемое направление split
termguicolors                       |  24-битный цвет
updatetime=250                      |  отзывчивость CursorHold (git/LSP)
inccommand=split                    |  живой предпросмотр :s (только Neovim)
jumpoptions=stack,view              |  здравый jumplist (только Neovim)
Старт каждого init.lua: vim.g.mapleader = ' ' до загрузки плагинов, затем vim.loader.enable() (кэш Lua-байткода, ~30% к старту). Подробно - глава 20.

Must-have плагины 2026

Каждый разобран в соответствующей главе; здесь - карта для быстрого выбора.

Код: Выделить всё

Плагин                                 |  Роль                                                  |  Глава
---------------------------------------+--------------------------------------------------------+-------
lazy.nvim                              |  менеджер плагинов с lazy-loading                      |  23
vim.pack (ядро 0.12)                   |  встроенный менеджер без зависимостей (нет lazy-load)  |  23
Нативный LSP (vim.lsp.config/enable)   |  LSP без плагина-фреймворка                            |  25
nvim-lspconfig                         |  каталог дефолтных конфигов серверов                   |  25
mason.nvim + mason-lspconfig           |  установка серверов, авто-enable                       |  25
blink.cmp (пин v1)                     |  быстрый автокомплит, дефолт LazyVim                   |  26
nvim-treesitter (ветка main)           |  парсеры/подсветка/structural                          |  27
mini.ai / nvim-treesitter-textobjects  |  расширенные text objects                              |  6, 27
mini.surround / nvim-surround          |  окружение (sa/sd/sr)                                  |  6
conform.nvim                           |  format-on-save (один владелец)                        |  20
which-key.nvim                         |  дискаверабилити leader-маппингов                      |  21
telescope / fzf-lua / snacks.picker    |  fuzzy-поиск                                           |  28
gitsigns.nvim + neogit/lazygit         |  git в буфере + полный клиент                          |  29
oil.nvim                               |  файловый менеджер как буфер                           |  15
grug-far.nvim                          |  интерактивный find&replace по проекту                 |  14
LazyVim / kickstart.nvim               |  дистрибутив / обучающий старт                         |  30
Лучшие практики 2026
  • Нативный LSP вместо lspconfig.setup{}. В Neovim 0.11+ настраивайте серверы через vim.lsp.config('clangd', {...}) и включайте vim.lsp.enable({...}). Конфиги из ~/.config/nvim/lsp/<server>.lua подхватываются автоматически. Старый require('lspconfig').xxx.setup{} - legacy, будет удалён в nvim-lspconfig v3.0.0. Дефолтные кейбинды уже встроены: grn (rename), gra (code action), grr (references), gri (implementation), gO (symbols), K (hover), [d/]d (диагностика).
  • Диагностику включайте явно. После 0.11 virtual_text стал opt-in: vim.diagnostic.config({ virtual_text = true }) (или virtual_lines = { current_line = true }).
  • Treesitter - ветка main на Neovim 0.12. Старый master заморожен; main - несовместимый rewrite, требует tree-sitter-cli через системный пакетник. Подсветку включают вручную через vim.treesitter.start() в FileType-autocmd; ensure_installed удалён - парсеры ставятся через install() / :TSInstall.
  • Пиньте blink.cmp на v1 (version = '1.*' или branch = 'v1'): v2 в разработке, ломающие изменения и зависимость blink.lib.
  • lazy-loading через триггеры, не lazy=true вслепую: event/ft/cmd/keys. Не делайте ленивой цветовую схему и библиотеки (plenary) - гонка загрузки.
  • Коммитьте lockfile (lazy-lock.json или nvim-pack-lock.json) для воспроизводимости между машинами.
  • Один владелец форматирования на язык - либо LSP, либо conform.nvim, иначе двойное форматирование и дёрганье.
  • Vim everywhere для закрепления навыка: set -o vi в shell, IdeaVim (.ideavimrc + source ~/.vimrc), Vimium в браузере. Подробно - глава 31.
  • Опытным Vim-юзерам не мигрировать на Neovim без причины: на серверах Vim легче и почти везде предустановлен. Держите оба.
Частые ошибки
  • :cdo вместо :cfdo для s///g. :cdo бьёт по каждой записи, поэтому файл с N совпадениями обработается N раз. Для substitute берите :cfdo.
  • Забытое сохранение после :cdo/:cfdo. Изменения висят в буферах; добавляйте | update в саму команду.
  • clipboard=unnamedplus по SSH глушит авто-OSC52 - текст не уходит в локальный буфер. Оставьте clipboard пустым или форсируйте vim.g.clipboard = 'osc52'.
  • Ловушка yank/delete. После yiw любое d/x затирает unnamed-регистр, и p вставит удалённое. Спасает регистр 0 (только yank) или blackhole "_d.
  • mapleader после загрузки плагинов - плагины забиндят keys на старый \. Ставьте leader первым.
  • Рекурсивный макрос с непустым регистром выполнит старое содержимое. Очищайте qaq перед записью.
  • Паттерн в скрипте без \v/\m/\M/\V ломается у пользователя с нестандартной magic. Фиксируйте режим явно.
  • s/// без флага e в :cfdo прерывается на первом файле без совпадений (E486). Добавляйте e.
  • ensure_installed в spec для nvim-treesitter main - поле удалено, тихо игнорируется. Используйте install() API.
  • Старый require('lspconfig').setup{} на 0.11+ дублирует нативный API и даёт deprecation warning.
Упражнения
  1. Грамматика на лету. Не подглядывая, выведите команды для: "изменить содержимое ближайших кавычек", "удалить абзац вместе с пустой строкой", "привести слово к верхнему регистру", "скопировать содержимое фигурного блока". Затем проверьте себя по таблицам объектов и операторов.
  1. Замена по проекту. В тестовом проекте из нескольких файлов наполните quickfix через :grep! oldName, сузьте список :Cfilter по нужному пути и выполните :cfdo s/oldName/newName/ge | update. Убедитесь, что изменения сохранились во всех файлах.
  1. Регистры без потерь. Скопируйте слово (yiw), затем удалите другое слово, и вставьте первое из регистра 0 ("0p). Сравните с p из unnamed - почувствуйте разницу.
  1. Макрос + диапазон. Запишите макрос, который оборачивает строку в кавычки и добавляет запятую, затем примените его ко всем строкам выделения через :'<,'>normal @a. Повторите тот же результат через рекурсивный макрос и сравните, какой подход чище.
  1. Позиционный regex. Дан текст key = "value". Напишите :s с \zs/\ze, которая заменит только содержимое кавычек, не трогая сами кавычки и ключ.
  1. Конфиг-аудит. Откройте свой init.lua. Проверьте: leader задан до плагинов? vim.loader.enable() включён? Lockfile в git? Если используете LSP - это нативный vim.lsp.config/enable или legacy setup{}? Treesitter на ветке main?
Главное из главы
  • Vim - это грамматика: оператор + движение/объект. Запомнив N движений и M операторов, вы владеете N x M командами. Учите паттерн, а не комбо.
  • Text objects (iw, i(, it, ap) предпочтительнее motion-команд - они курсор-независимы и дружат с ..
  • Регистры разделяйте: 0 для надёжного yank, _ для удалений без засорения, + для системного буфера.
  • :global, :substitute, quickfix + :cfdo - три кита массового редактирования. Не путайте :cdo и :cfdo.
  • Макросы масштабируются через :normal по диапазону или паттерну - чаще чище рекурсии.
  • В Neovim 2026 базовый IDE-функционал переехал в ядро: нативный LSP (0.11), Treesitter и автокомплит (0.12). Конфиги стали "тише" - многие фичи (virtual_text) теперь opt-in.
  • Эта шпаргалка - отправная точка. Настоящая беглость приходит не от чтения таблиц, а от ежедневной практики: берите 1-2 новые команды в неделю и сознательно применяйте их в реальной работе. План обучения - глава 33.
👍8 ❤️1 🔥1 😄 🤔
✔ Лучший ответ сформирован автоматически — wireguard6
Roman_Vim писал(а):изменили слово, не теряя буфер... либо vnoremap p "_dP вот этот маппинг на p через blackhole - лучшее что забрал отсюда. теперь viw p и буфер не сгорает, можно тыкать сколько угодно раз подряд
Перейти к ответу →
Аватара пользователя
tom998
Сообщения: 1
Зарегистрирован: 12 май 2026, 13:59

Re: Шпаргалка-справочник: все ключевые команды одним списком

Сообщение tom998 »

а у меня затык был с тем самым yiw потом d потом p вставляет удаленное, бесился неделями не понимая что не так. тут прямо в ловушках yank/delete расписано, спас регистр 0 и "_d. жаль раньше не наткнулся
👍2 ❤️2 🔥 😄 🤔
Аватара пользователя
wireguard6
Сообщения: 1
Зарегистрирован: 03 июн 2026, 06:20

Re: Шпаргалка-справочник: все ключевые команды одним списком

Сообщение wireguard6 »

✔ Лучший ответ — сформирован автоматически
Roman_Vim писал(а):изменили слово, не теряя буфер... либо vnoremap <leader>p "_dP
вот этот маппинг на <leader>p через blackhole - лучшее что забрал отсюда. теперь viw <leader>p и буфер не сгорает, можно тыкать сколько угодно раз подряд
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
kummet
Сообщения: 1
Зарегистрирован: 22 май 2026, 17:28

Re: Шпаргалка-справочник: все ключевые команды одним списком

Сообщение kummet »

кто нибудь юзает :cfdo на постоянке? я все по привычке через grug-far делал, а тут :grep! потом :copen потом cfdo s///ge | update и все по проекту. главное e и update не забыть, без них то E486 то правки висят в буферах
👍2 ❤️1 🔥 😄 🤔1
Аватара пользователя
silica
Сообщения: 1
Зарегистрирован: 05 июн 2026, 08:30

Re: Шпаргалка-справочник: все ключевые команды одним списком

Сообщение silica »

распечатал таблицу с операторами и движениями, прилепил на монитор. через неделю поймал себя что уже не смотрю на нее, реально комбинируется само как и обещали в начале главы про N x M
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
pasha22
Сообщения: 1
Зарегистрирован: 04 июн 2026, 23:52

Re: Шпаргалка-справочник: все ключевые команды одним списком

Сообщение pasha22 »

коротко - топ шпаргалка, закинул в закладки
👍1 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Рабочие рецепты, тренажёры и план обучения

Все главы курса «Vim и Neovim: модальное редактирование от основ до современного Neovim»

Поделиться темой: ✈ Telegram VK

Вернуться в «Vim и Neovim: модальное редактирование от основ до Neovim 2026»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость