O Vim pode fazer isso, embora possa ser um pouco desajeitado e precise de algumas configurações.
romainl te deixa no meio do caminho session
. Os bits ausentes são arquivos de troca :preserve
, e o &
sinalizador para cpoptions
.
Os arquivos de troca destinam-se à recuperação se o Vim ou o seu sistema travar. Eles permitem recuperar alterações não salvas (com algumas limitações, consulte :he swap-file
). No entanto, quando o Vim sai normalmente, ele exclui os arquivos de troca que estava usando, mesmo que o buffer tenha sofrido alterações não salvas.
É aí que :preserve
e cpoptions
's &
entrar. :preserve
Forças Vim para escrever todos os tampões para os seus arquivos de swap imediatamente (em oposição ao padrão após 4 segundos ou 200 caracteres, ou o que quer que suas opções definiu que ele). Doing :set cpoptions+=&
diz ao Vim para não excluir os arquivos de troca salvos :preserve
ao sair normalmente.
Infelizmente, o Vim não limpa automaticamente os arquivos de troca ao se recuperar deles, para que você possa acabar com um diretório parecido com este:
.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt
Você pode excluir os antigos manualmente, mas o Vim oferecerá automaticamente a recuperação apenas se houver um *.swp
arquivo onde ele colocaria seu novo arquivo de troca. O :recover
comando forçará o Vim a procurar arquivos de troca dos quais recuperar.
Usando comandos automáticos, você pode automatizar a preservação (provavelmente com o QuitPre
evento) e a recuperação (provavelmente com BufRead
ou BufReadPost
). O Recover.vim é um plug-in que pode funcionar como uma alternativa mais amigável para gerenciar a recuperação. Parece também lidar com a limpeza de arquivos de troca. Não tenho certeza de como ele trataria um diretório com um arquivo, .swo
mas sem .swp
. Você ainda pode precisar usar :recover
para esse caso.
O vim-obsession é outro plug-in que afirma facilitar as sessões de manuseio.