Vim có thể làm điều này, mặc dù nó có thể hơi lộn xộn và có một số thiết lập.
romainl giúp bạn một phần với session. Các bit bị thiếu là các tệp hoán đổi :preservevà &cờ cho cpoptions.
Các tập tin hoán đổi được dự định để phục hồi nếu Vim hoặc hệ thống của bạn gặp sự cố. Chúng cho phép bạn khôi phục mọi thay đổi chưa lưu (với một số hạn chế, xem :he swap-file). Tuy nhiên, khi Vim thoát bình thường, nó sẽ xóa mọi tệp hoán đổi mà nó đang sử dụng, ngay cả khi bộ đệm có các thay đổi chưa được lưu.
Đó là nơi mà :preservevà cpoptions's &đi vào. :preserveLực lượng Vim để viết tất cả các bộ đệm để các file swap của họ ngay lập tức (như trái ngược với tiêu chuẩn sau 4 giây hoặc 200 ký tự, hoặc bất cứ lựa chọn của bạn đã đặt nó vào). Làm :set cpoptions+=&cho Vim không xóa các tập tin trao đổi được lưu với :preservekhi thoát bình thường.
Thật không may, Vim không tự động dọn sạch các tệp hoán đổi khi khôi phục từ chúng, vì vậy bạn có thể sớm kết thúc với một thư mục trông như thế này:
.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt
Bạn có thể xóa những cái cũ theo cách thủ công, nhưng Vim sẽ chỉ tự động đề nghị khôi phục nếu có một *.swptệp nơi nó sẽ đặt tệp hoán đổi mới của nó. Các :recoverlệnh sẽ buộc Vim để tìm kiếm các file swap để phục hồi từ.
Bằng cách sử dụng autocommands, bạn có thể tự động bảo quản (có thể với QuitPresự kiện) và khôi phục (có thể bằng BufReadhoặc BufReadPost). Recover.vim là một plugin có thể hoạt động như một giải pháp thay thế thân thiện hơn để quản lý khôi phục. Nó dường như cũng xử lý làm sạch các tập tin trao đổi. Tôi không chắc làm thế nào nó sẽ xử lý một thư mục với một tập tin .swonhưng không có .swp. Bạn vẫn có thể cần phải sử dụng :recovercho trường hợp đó.
vim-obsession là một plugin khác tuyên bố sẽ giúp xử lý các phiên dễ dàng hơn nhiều.