Vim puede hacer esto, aunque puede ser un poco torpe y tomar algo de configuración.
romainl te lleva a la mitad session. Los bits que faltan son archivos de intercambio :preserve, y la &bandera de cpoptions.
Los archivos de intercambio están destinados a la recuperación si Vim o su sistema se bloquean. Le permiten recuperar cualquier cambio no guardado (con algunas limitaciones, consulte :he swap-file). Sin embargo, cuando Vim sale normalmente, elimina todos los archivos de intercambio que estaba utilizando, incluso si el búfer tenía cambios sin guardar.
Ahí es donde :preservey cpoptions's &vienen en. :preserveFuerzas Vim para escribir todos los tampones a sus archivos de intercambio de inmediato (en comparación con el estándar después de 4 segundos o 200 caracteres, o lo que sus opciones se han fijado a). Hacer :set cpoptions+=&le dice a Vim que no elimine los archivos de intercambio guardados :preserveal salir normalmente.
Desafortunadamente, Vim no limpia automáticamente los archivos de intercambio cuando se recupera de ellos, por lo que pronto puede terminar con un directorio como este:
.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt
Puede eliminar los más antiguos manualmente, pero Vim solo ofrecerá automáticamente la recuperación si hay un *.swparchivo donde colocaría su nuevo archivo de intercambio. El :recovercomando obligará a Vim a buscar archivos de intercambio para recuperarse.
Al usar los comandos automáticos, puede automatizar la conservación (probablemente con el QuitPreevento) y la recuperación (probablemente con BufReado BufReadPost). Recover.vim es un complemento que podría funcionar como una alternativa más amigable para administrar la recuperación. Parece que también maneja la limpieza de archivos de intercambio. No estoy seguro de cómo manejaría un directorio con .swopero sin .swparchivo. Es posible que aún necesite usar :recoverpara ese caso.
vim-obsession es otro complemento que pretende facilitar el manejo de las sesiones.