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 :preserve
và &
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à :preserve
và cpoptions
's &
đi vào. :preserve
Lự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 :preserve
khi 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 *.swp
tệp nơi nó sẽ đặt tệp hoán đổi mới của nó. Các :recover
lệ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 QuitPre
sự kiện) và khôi phục (có thể bằng BufRead
hoặ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 .swo
nhưng không có .swp
. Bạn vẫn có thể cần phải sử dụng :recover
cho 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.