Гид по технологиям

Как отменять и повторять изменения в Vim на Linux

4 min read Vim Обновлено 31 Dec 2025
Как отменять и повторять изменения в Vim
Как отменять и повторять изменения в Vim

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

Логотип VIM на размытом фоне редактора VIM

Коротко: 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» или их русская локализация информируют, сколько строк было удалено/восстановлено.

Уведомление об отмене в Vim

Ветвления 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 дают визуальные инструменты для управления ветвями.

Уведомление о повторе в Vim

Полезно помнить: работайте в нормальном режиме, префиксы чисел помогают пакетной отмене, а постоянный undo спасёт историю между сессиями.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Внедрение зависимостей в PHP с Apex Container
PHP

Внедрение зависимостей в PHP с Apex Container

Исправить UNEXPECTED KERNEL MODE TRAP в Windows 10
Windows 10

Исправить UNEXPECTED KERNEL MODE TRAP в Windows 10

text-shadow в CSS: 11 стильных примеров
CSS

text-shadow в CSS: 11 стильных примеров

Как использовать API в вашей программе
Разработка

Как использовать API в вашей программе

Резервное копирование WordPress — полное руководство
WordPress

Резервное копирование WordPress — полное руководство

Как создать простой сайт на PHP
Веб-разработка

Как создать простой сайт на PHP