Câu trả lời:
Không có tùy chọn dựng sẵn, mặc dù :help 'autosave'
(trong todo.txt) đề cập đến một mô tả về những gì một tùy chọn như vậy có thể làm.
Một cách có thể để thực hiện điều này là sử dụng CursorHold
sự kiện autocommand. Sự kiện này được kích hoạt khi người dùng chưa nhấn phím trong một 'updatetime'
phần nghìn giây.
autocmd CursorHold * update
Các :update
lệnh chỉ tiết kiệm bộ đệm nếu nó được sửa đổi. Nếu bạn cũng muốn điều này xảy ra trong khi chế độ chèn được kích hoạt, CursorHoldI
có thể được thêm vào danh sách sự kiện.
autocmd CursorHold,CursorHoldI * update
Một lựa chọn khác là 'autowrite'
tùy chọn, sẽ lưu bộ đệm trước khi thực hiện lệnh bên ngoài (hữu ích để lưu trước khi chạy :make
) hoặc chuyển sang bộ đệm khác.
Vim có tính năng tự động lưu, nhưng nó lưu nó vào tập tin "recovery".
Khi bạn chỉnh sửa tài liệu, vd MyFile.txt
sẽ tạo tệp phục hồi .MyFile.txt.swp
. Nếu hệ thống của bạn gặp sự cố hoặc phiên của bạn bị chết, thì bạn có thể kết nối lại và khôi phục từ cơ bản nơi bạn rời đi, bằng cách nhập:
vim -r MyFile.txt
Điều này sẽ mở tệp để chỉnh sửa và khôi phục những thay đổi cuối cùng bạn đã thực hiện với nó.
Sau đó, bạn có thể lưu phiên bản đã khôi phục theo cách thông thường :w
.
Thật không may, khi bạn thoát vim, nó sẽ rời khỏi .MyFile.txt.swp
xung quanh và bạn cần xóa nó bằng tay:
rm .MyFile.txt.swp
Xem "Recovery" Man Trang Cũng Chương 11
:wq
hoặc :q!
hoặc ZZ
hoặc vv), các file swap tự động cần được loại bỏ.
Tôi đã tạo một plugin vim-autosave sử dụng tính năng Vim 8 của Timers để định kỳ lưu bộ đệm của bạn.
Tôi làm cho Vim của tôi lưu mọi thứ mỗi khi mất tập trung.
autocmd FocusLost <your-patterns-here> silent! wall
Các mẫu của tôi khá dài và tôi sử dụng chúng trong một số autocmds nhưng để hoàn thiện thì đây là giao diện:
if exists(':keeppatterns')
let s:keeppatterns = 'keeppatterns '
else
let s:keeppatterns = ''
endif
augroup AutoSaveGroup
" :help file-pattern has some info,
" but some of it is is buried in the PATTERNS section of usr_40.txt
let s:autoPattern = "*.{c,h,[ch]pp,[acjt]s,inl,cg,cgfx,fx,py,bat,cmd,jam,vim,yml,yaml,vsprops,erb,rb,html,htm},SCons*,*vimrc"
autocmd!
execute "autocmd FocusLost" s:autoPattern "silent! wall"
execute "autocmd BufWritePre" s:autoPattern s:keeppatterns . 'call FixFormatting(expand("<afile>"))'
execute "autocmd FileChangedRO" s:autoPattern "silent !p4 edit %:p"
execute "autocmd FileChangedRO" s:autoPattern "write!"
autocmd FocusLost *.txt silent! wall
augroup END
Như những người khác đã chỉ ra, vim có một tệp hoán đổi (.swp) sẽ được tạo ở bất cứ nơi nào tệp gốc của bạn, nhưng trong tệp .vimrc của bạn, bạn có thể đặt thư mục .swp.
Bạn sẽ cần tạo thư mục với mkdir
và sau đó đặt .vimrc của bạn đến vị trí đó.
set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
Các vim-workspace Plugin có một tính năng khá tùy biến tự động tiết kiệm mà có thể phù hợp với nhu cầu của bạn. Theo mặc định, nó cho phép tự động lưu trong phiên làm việc (tính năng chính của nó), nhưng bạn có thể đặt nó luôn tự động lưu nếu đó là tất cả những gì bạn đang tìm kiếm ( let g:workspace_autosave_always = 1
).
Cố gắng lưu bộ đệm bất cứ khi nào văn bản được thay đổi:
autocmd TextChanged,TextChangedI <buffer> silent write
Điều này làm việc cho tôi.