Как отобразить временные метки отмены и повторной отмены в строке состояния Vim с помощью vim-airline

Vim — это мощный текстовый редактор с поддержкой клавиатуры и широкими возможностями настройки. Но по умолчанию он не показывает историю редактирования. Если вы когда-либо нажимали u
или <Ctrl-r>
и задавались вопросом, что именно изменилось и когда, вы не одиноки. К счастью, с помощью нескольких простых настроек в файле .vimrc
и плагина vim-airline вы можете отображать временные метки отмены и повтора в реальном времени прямо в строке состояния Vim.
В этой статье мы обсудим, как:
- Подсчитайте и отобразите статистику количества отмен и повторов
- Показывает, когда в последний раз была запущена отмена или повтор
- Интегрируйте эти показатели в динамическую строку состояния Vim, используя
vim-airline
.
Зачем отслеживать отмену и повтор в Vim?
В Vim есть встроенная поддержка отмены (u
) и повтора (<Ctrl-r>
), но по умолчанию она не показывает никаких результатов. Вы нажимаете клавишу, что-то меняется, но нет ни метки времени, ни счётчика, ни записи о том, что произошло.
Отслеживание действий по отмене и повтору помогает несколькими ключевыми способами:
- Осведомленность: Точно знайте, когда было отменено последнее изменение.
- Управление: посмотрите, сколько раз вы отменяли или повторяли действие.
- Обратная связь: Получите подтверждение того, что ваша команда отмены / повтора что-то сделала.
Настроив vim-airline для отображения временных меток отмены и повторной отмены, вы сможете легко отслеживать, когда были отменены/повторно отменены изменения и сколько раз вы отменяли/повторно отменяли действия.
На следующих этапах мы узнаем, как интегрировать эту функцию в нашу версию Vim.
Предварительные условия
Прежде чем приступить к выполнению этого руководства, убедитесь, что у вас есть следующее:
- Vim или Neovim установлены в вашей системе.
- vim-plug или vundle или любой другой менеджер плагинов для простой установки плагинов Vim.
- Базовое понимание того, как редактировать файлы конфигурации Vim (например,
.vimrc
илиinit.vim
).
Установите vim-плагин авиакомпании
vim-airline — это лёгкий и простой в использовании плагин для строки состояния Vim. Он предоставляет настраиваемую строку состояния, которая легко интегрируется с другими плагинами Vim.
Для начала давайте установим vim-airline.
1. Откройте файл конфигурации:
Для Vim:
vim ~/.vimrc
Для Neovim:
nvim ~/.config/nvim/init.vim
2. Добавьте настройку плагина vim-plug:
Внутри файла добавьте следующие строки:
call plug#begin('~/.vim/plugged') Plug 'vim-airline/vim-airline' call plug#end()
Эти строки сообщают vim-plug:
- Начните загружать плагины (
plug#begin
). - Загрузить
vim-airline
с GitHub. - Прекратите загрузку плагинов (
plug#end
).
Сохраните файл и закройте его, набрав :wq
и нажав клавишу ENTER.
3. Установите плагин
После сохранения файла откройте Vim (или Neovim) и выполните:
:PlugInstall
После установки vim-airline автоматически заменит строку состояния в Vim.
Вот как выглядит строка состояния после установки и включения vim-airline:

Строка состояния Vim
Как видите, плагин vim-airline добавил в редактор Vim аккуратную строку состояния.
По умолчанию vim-airline
отображается такая информация, как:
- Раздел A: Режим Vim (например,
NORMAL
,INSERT
) - Раздел B: Состояние окружающей среды (информация VCS)
- Раздел C: имя файла и флаги (например, изменено
+
, только для чтенияRO
) - Раздел X: Тип файла (vim)
- Раздел Y: Кодировка файла
- Раздел Z: Текущее время или информация о линии
Отображение меток отмены и повторной отмены в Vim с помощью vim-airline
Откройте свой .vimrc
или init.vim
файл:
vim .vimrc
Добавьте следующие строки в конце:
" ---------------------------- " Настройка отслеживания отмены/повторения " ---------------------------- let g:undo_count = 0 let g:redo_count = 0 let g:last_undo_time = "" " Сопоставьте 'u' для обновления счетчика отмены и метки времени nnoremap u :let g:undo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| normal! u " Настройте Ctrl-r для обновления счетчика повторов и метки времени nnoremap :let g:redo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| redo «Отобразить статистику отмены и повтора в разделе X авиакомпании let g:airline_section_x = '%{g:last_undo_time != "" ? g:last_undo_time . " (undos:" . g:undo_count . ", redos:" . g:redo_count . ")" : strftime("%H:%M:%S")}'
Введите :wq
и нажмите ENTER, чтобы сохранить файл и закрыть его. С этого момента, если произойдёт отмена или повторная обработка, в строке состояния отобразится что-то вроде этого:
2025-04-29 16:33:10 (undos: 3, redos: 1)
Тестирование Вашей конфигурации
Для проверки просто откройте любой файл. В режиме вставки введите несколько строк текста.
This is first line. This is second line. This is third line.
Затем выйдите из режима вставки и нажмите u
для отмены строки и <Ctrl-r>
для повторного выполнения.
Следите за обновлением строки состояния vim-airline
с новыми показателями и отметками времени. В правой части строки состояния вы должны увидеть отметку времени, например:
2025-04-29 17:00:17 (undos:2, redos:2)

Отображение временных меток отмены и повтора в Vim
Вы также увидите, что при взаимодействии с файлом счётчики отмены/повторения будут увеличиваться.
Дополнительные советы и настройки
Отображения лидеров:
Вместо использования <Ctrl-r>
вы можете сопоставить redo с чем-то вроде <Leader>r
.
nnoremap <Leader>r <C-r>
Постоянная отмена:
Включите постоянную отмену с помощью:
set undofile set undodir=~/.vim/undodir
Ведение журнала:
Чтобы сохранить информацию об отслеживании между сеансами, вы можете записать подсчёты в файл при выходе из Vim.
Устранение неполадок
Если отметка времени отображается не так, как ожидалось, проверьте следующее:
- Убедитесь, что вы используете Vim 8 или более позднюю версию (поскольку функция
strftime
доступна в Vim 8+). - Убедитесь, что
vim-airline
правильно установлен: используйте:PlugStatus
для проверки загрузки плагина.
Конфигурация My .vimrc
Вот моя полная конфигурация файла .vimrc
. Вы можете просто скопировать/вставить всё содержимое или его часть в свой файл .vimrc
.
" ---------------------------- " Основные настройки " ---------------------------- set nocompatible " ---------------------------- " Настройка менеджера плагинов vim-plug " ---------------------------- call plug#begin('~/.vim/plugged') " vim-airline status bar Plug 'vim-airline/vim-airline' call plug#end() filetype plugin indent on " ---------------------------- " Настройка отслеживания отмены/повтора " ---------------------------- let g:undo_count = 0 let g:redo_count = 0 let g:last_undo_time = "" " Сопоставьте 'u' для обновления счетчика отмены и метки времени nnoremap u :let g:undo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| normal! u " Настройте Ctrl-r для обновления счетчика повторов и метки времени nnoremap :let g:redo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| redo «Отобразить статистику отмены и повтора в разделе X авиакомпании let g:airline_section_x = '%{g:last_undo_time != "" ? g:last_undo_time . " (undos:" . g:undo_count . ", redos:" . g:redo_count . ")" : strftime("%H:%M:%S")}'
Распад моего .vimrc
Вот описание того, что делает каждая строка в моей конфигурации .vimrc:
Базовая настройка Vim
set nocompatible
- Отключает совместимость с очень старым редактором «vi».
- Включает все функции, специфичные для Vim, и следит за корректной работой плагинов.
Настройка менеджера плагинов (vim-plug
)
call plug#begin('~/.vim/plugged')
- Инициализирует загрузку плагина с помощью
vim-plug
. ~/.vim/plugged
это каталог, в котором будут храниться ваши плагины.
Plug 'vim-airline/vim-airline'
- Загружает плагин vim-airline, который предоставляет компактную настраиваемую строку состояния.
call plug#end()
- Завершает блок плагинов. Все плагины должны быть перечислены между
plug#begin()
иplug#end()
.
filetype plugin indent on
Это позволяет:
- Определение типа файла
- Загрузка плагинов, зависящих от типа файла
- Автоматическое выделение отступов для распознанных типов файлов
Переменные отслеживания отмены/ Повтора
let g:undo_count = 0 let g:redo_count = 0 let g:last_undo_time = ""
g:undo_count
: Отслеживает, сколько раз вы нажимаетеu
(отмена).g:redo_count
: Отслеживает, сколько раз вы нажимаете<C-r>
(повторить).g:last_undo_time
: Сохраняет временную метку последней отмены или повтора.
Пользовательские Сопоставления ключей
Отменить:
nnoremap <silent> u :let g:undo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| normal! u<CR>
Заменяет команду по умолчанию u
пользовательской версией, которая:
- Приращения
undo_count
- Обновления
last_undo_time
- Выполняет фактическую отмену с помощью
normal! u
<silent>
останавливает отображение команды в командной области.
Повторить:
nnoremap <silent> <C-r> :let g:redo_count += 1 \| let g:last_undo_time = strftime("%Y-%m-%d %H:%M:%S") \| redo<CR>
- Аналогично отображению отмены, но для повтора.
- Увеличивает
redo_count
и обновляет временную метку.
Конфигурация строки состояния авиакомпании
let g:airline_section_x = '%{g:last_undo_time != "" ? g:last_undo_time . " (undos:" . g:undo_count . ", redos:" . g:redo_count . ")" : strftime("%H:%M:%S")}'
- Настраивает
X
раздел вvim-airline
строке состояния. - Если
last_undo_time
установлено значение, оно показывает:
YYYY-MM-DD HH:MM:SS (undos:X, redos:Y)
- Если нет отменённых или повторных действий, отображается только текущее время (
strftime("%H:%M:%S")
).
Заключение
С помощью всего нескольких строк Vimscript и лёгкого плагина мы добавили удобную функцию просмотра истории редактирования в Vim. Теперь вы можете работать эффективнее, отслеживая и отображая полезную информацию, например, временные метки отмены и повтора, в строке состояния.
Отслеживание операций отмены и повтора в строке состояния повышает осведомлённость, делает редактирование более безопасным и помогает работать увереннее.
Независимо от того, изучаете ли вы Vim или повышаете эффективность своего повседневного рабочего процесса, эта настройка даст вам представление, о котором вы даже не подозревали.