Vim peut le faire, même si cela peut être un peu maladroit et nécessiter une certaine configuration.
romainl vous aide à mi-chemin session. Les bits manquants sont les fichiers d'échange :preserveet le &drapeau de cpoptions.
Les fichiers d'échange sont destinés à la récupération en cas de panne de Vim ou de votre système. Ils vous permettent de récupérer toutes les modifications non enregistrées (avec certaines limitations, voir :he swap-file). Cependant, lorsque Vim se ferme normalement, il supprime tous les fichiers d'échange qu'il utilisait, même si le tampon avait des modifications non enregistrées.
C'est là :preserveet cpoptions« s &entrent en jeu . :preserveForces vim pour écrire tous les tampons à leurs fichiers d'échange immédiatement (par opposition à la norme après 4 secondes ou 200 caractères, ou quels que soient vos options ont mis à). Faire :set cpoptions+=&indique à Vim de ne pas supprimer les fichiers d'échange échangés avec :preservelors de la fermeture normale.
Malheureusement, Vim ne nettoie pas automatiquement les fichiers d'échange lors de leur récupération, vous pouvez donc bientôt vous retrouver avec un répertoire ressemblant à ceci:
.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt
Vous pouvez supprimer les plus anciens manuellement, mais Vim ne proposera automatiquement de récupérer que s'il y a un *.swpfichier où il mettra son nouveau fichier d'échange. La :recovercommande forcera Vim à rechercher les fichiers d'échange à récupérer.
En utilisant les autocommandes, vous pouvez automatiser la conservation (probablement avec l' QuitPreévénement) et la récupération (probablement avec BufReadou BufReadPost). Recover.vim est un plugin qui pourrait fonctionner comme une alternative plus conviviale pour gérer la récupération. Il semble également gérer le nettoyage des fichiers d'échange. Je ne sais pas comment il gérerait un répertoire avec un fichier .swomais pas .swp. Vous devrez peut-être encore utiliser :recoverpour ce cas.
vim-obsession est un autre plugin qui prétend faciliter la gestion des sessions.