O vim tem um grande buffer de desfazer e refazer - Você pode desfazer qualquer número de alterações (não tenho certeza de qual é o limite) e refazê-las. Isso faz o que você quer?
Atualização:
Desfazer persistente é como um sistema de controle de versão local que você não precisa gerenciar. Para configurá-lo basta colocar isso no seu .vimrc:
set undodir=~/.vim/undodir
set undofile
set undolevels = 1000 "maximum number of changes that can be undone
set undoreload = 10000 "maximum number lines to save for undo on a buffer reload
Para obter mais ajuda, basta digitar:
:help new-persistent-undo