Проблема
Проблема здесь в том, что, хотя такие события, как BufWritePre
, всегда запускаются, когда текущий буфер активен (как вы сейчас выполняете :write
), такие события, как VimLeave
запускаются (или, скорее, могут, в зависимости от того, как вы выходите из Vim), выходить за пределы области действия текущего буфера.Вы могли бы отредактировать несколько файлов (Python или других) во вкладках, в списке аргументов, в разделенных окнах и т. Д. На VimLeave
вам придется снова найти все эти буферы и явно перебрать их;механизм :autocmd
не сделает этого за вас.
Лучшим триггером будет BufUnload
или BufDelete
, так как он срабатывает один раз для каждого буфера.Однако даже при наличии сложностей, как объясняет :help BufUnload
:
ПРИМЕЧАНИЕ. При выполнении этой автокоманды текущий буфер %
может отличаться от буфера, который выгружается<afile>
.Не переключайтесь на другой буфер или окно, это вызовет проблемы!
Хотя невозможно :write
другой буфер без переключения на него, вы можете очень хорошо выйти из других буферов (например, через :[N]bdelete
или :qall
).Поскольку вам не разрешено переключаться на затронутый (умирающий) буфер, использование :substitute
исключено.Вы можете использовать нижний уровень readfile()
и writefile()
, с указанием спецификаций буфера, полученных через expand('<afile>:p')
, и манипуляций через substitute()
.Или выполните манипуляции с отметкой времени вне Vim с помощью system()
и внешней команды оболочки.
Обсуждение
Как видите, переключение с обновлений при каждом сохранении на обновлениетолько после выхода из Vim / буфер звучит просто, но его очень сложно реализовать (все сделано правильно - вы можете что-то запутать, если, например, редактируете только один файл в сеансе Vim).Я бы предпочел остаться с оригинальным дизайном и работать над «раздражающей» частью.С надежной реализацией (которая, например, не загромождает текущий шаблон поиска и вид окна, как это делает ваше простое решение), это очень естественно, и многие люди используют такую функциональность.Фактически, вы можете использовать мой плагин AutoAdapt или любой из альтернатив, перечисленных на его странице плагина (или другие плагины, о которых я не знал, найденные на vim.org , илив другом месте).