Как отменять и повторять изменения в Vim на Linux
Быстро отменять и повторять правки в Vim просто: нажмите Esc, затем u для отмены и Ctrl+r для повтора. Для многократной отмены префиксируйте команду числом (например, 2u). Включите постоянный undo в vimrc, чтобы сохранять историю между сессиями.

Коротко: Vim отслеживает изменения в файле и позволяет откатиться назад или вперёд по истории изменений. Ниже — понятные шаги, примеры, советы и варианты для разных задач.
Краткое определение
Undo — откат последнего изменения. Redo — повтор изменения, отменённого командой undo.
Основные команды
- Esc — перейдите в командный режим. Всегда нажимайте Esc перед undo/redo.
- u — отменяет последнее изменение.
- [N]u — отменяет N последних изменений (пример: 2u отменит два изменения).
- Ctrl+r — повторяет ранее отменённые изменения (redo).
- :undolist — показывает список состояний и ветвей undo (встроенная команда).
Примеры:
Esc # убедиться, что вы в командном режиме
u # отменить последнее изменение
2u # отменить два изменения
Ctrl+r # повторить отменённое действие
:undolistВажно: действия в режиме вставки (insert) группируются в одно изменение, пока вы не выйдете из вставки. То есть если вы вводите несколько строк подряд, одна команда u удалит весь этот ввод.
Повторные и множественные отмены
Если нужно отменить больше одного шага, перед командой u укажите число. Аналогично для повтора можно использовать префикс перед Ctrl+r в нормальном режиме, например 3
Сообщения типа «n fewer lines» или их русская локализация информируют, сколько строк было удалено/восстановлено.
Ветвления undo и просмотр истории
Vim умеет строить дерево отмен. Когда вы откатываете изменения, затем вносите новые правки, создаётся новая ветвь истории. Можно просмотреть текущую историю команд с помощью :undolist — это покажет метки состояний, номера изменений и ветви.
Для удобной визуализации есть плагины:
- undotree — визуальный просмотр дерева undo и быстрый переход по ветвям.
- gundo.vim — похожий инструмент с историей изменений.
Используйте :help undotree или просмотр документации плагина для установки.
Постоянный undo между сессиями
По умолчанию история undo хранится только в памяти. Чтобы сохранять её между сессиями и после закрытия файла, включите undofile и укажите каталог для файлов undo в вашем vimrc. Пример конфигурации:
" Создать каталог для файлов undo (выполните в shell)
" mkdir -p ~/.vim/undo
set undofile
set undodir=~/.vim/undoПосле этого Vim будет сохранять историю undo в файлы в каталоге undodir. Это особенно полезно при длительной работе над проектом или при частых перезапусках редактора.
Особые случаи и поведение
- Вставка нескольких строк подряд считается одним изменением. Одно нажатие u вернёт весь ввод.
- Командные составные операции типа 3dd считаются одним изменением (удалятся сразу три строки как один шаг undo).
- Команда U (заглавная) имеет специфическое поведение: она отменяет все изменения, сделанные на текущей строке с момента последнего сохранения курсора на ней. Это отличается от u; используйте осторожно.
- Некоторые графические сборки Vim (gvim) и форки, такие как Neovim, могут иметь свои особенности в поведении undofile/undodir; проверяйте документацию конкретной сборки.
Быстрые советы и шаблоны (cheat sheet)
- Хочу быстро откатить ввод в текущей сессии: Esc → u
- Хочу вернуть только два последних изменения: Esc → 2u
- Отменил слишком много — вернуть назад: Esc → Ctrl+r
- Сохранить историю между сессиями: добавить set undofile в vimrc и указать undodir
- Посмотреть дерево undo быстро: :undolist или установить undotree-плагин
Ролевые чек-листы
Для разработчика:
- Убедиться, что Esc работает (переход в нормальный режим).
- Использовать числовые префиксы для пакетных откатов.
- Включить undofile в vimrc для длительных проектов.
Для технического писателя:
- Писать инструкции с учётом группировки изменений в insert-режиме.
- Тестировать команды на небольших файлах перед публикацией.
Критерии приёмки
- Команда u отменяет последнее целевое изменение в нормальном режиме.
- Префикс N работает: N u отменяет N шагов истории.
- Ctrl+r возвращает изменения, отменённые u.
- После включения undofile история доступна после перезапуска Vim.
Когда отмена может не сработать как ожидается
- Если вы не в нормальном режиме — команды u и Ctrl+r работать не будут.
- Если вы заранее не включили undofile, история исчезнет при закрытии редактора.
- Некоторые плагины могут влиять на группировку изменений. Проверяйте совместимость.
Краткая сводка (Summary)
Отмена и повтор в Vim реализованы простыми командами. u и Ctrl+r — основные клавиши. Для продвинутого управления используйте undolist и persistent undofile. Плагины вроде undotree дают визуальные инструменты для управления ветвями.
Полезно помнить: работайте в нормальном режиме, префиксы чисел помогают пакетной отмене, а постоянный undo спасёт историю между сессиями.
Похожие материалы
Внедрение зависимостей в PHP с Apex Container
Исправить UNEXPECTED KERNEL MODE TRAP в Windows 10
text-shadow в CSS: 11 стильных примеров
Как использовать API в вашей программе
Резервное копирование WordPress — полное руководство