Yanıtlar:
:help 'autosave'
Yerleşik bir seçenek yoktur, ancak (todo.txt içinde) böyle bir seçeneğin neler yapabileceğini açıklar.
Bunu yapmanın olası bir yolu CursorHold
autocommand olayını kullanmaktır . Bu olay, kullanıcı 'updatetime'
milisaniye için bir tuşa basmadığında tetiklenir .
autocmd CursorHold * update
:update
O değiştirilirse komut sadece tampon kaydeder. Eğer ekleme modu aktifken bunun olmasını istiyorsanız CursorHoldI
, etkinlik listesine eklenebilir.
autocmd CursorHold,CursorHoldI * update
Başka bir alternatif, 'autowrite'
harici bir komut çalıştırmadan önce arabelleği kaydedecek (çalıştırmadan önce kaydetmek için yararlı olan :make
) veya farklı bir arabelleğe geçme seçeneğidir.
Vim otomatik kaydetme özelliğine sahiptir, ancak onu "kurtarma" dosyasına kaydeder.
Bir belgeyi düzenlediğinizde, örneğin MyFile.txt
vim revovery dosyasını yaratacaktır .MyFile.txt.swp
. Sisteminiz kilitlendiyse veya oturumunuz ölecekti, yazarak yeniden bağlanıp esasen kaldığınız yerden kurtarabilirsiniz:
vim -r MyFile.txt
Bu dosyayı düzenlemek için açar ve üzerinde yaptığınız son değişiklikleri kurtarır.
Kurtarılan sürümü daha sonra normal şekilde kaydedebilirsiniz :w
.
Maalesef, vim'den çıktığınızda .MyFile.txt.swp
etrafından ayrılacak ve manuel olarak çıkarmanız gerekecek:
rm .MyFile.txt.swp
Bkz. "Kurtarma" Man sayfası Ayrıca Bölüm 11
:wq
veya :q!
veya ZZ
veya vb.), Takas dosyaları otomatik olarak kaldırılmalıdır.
Tamponlarınızı periyodik olarak kaydetmek için Zamanlayıcıların Vim 8 özelliğini kullanan bir eklenti vim-autosave yaptım .
Odak kaybolduğunda Vim'imin her şeyi kurtarmasını sağlıyorum.
autocmd FocusLost <your-patterns-here> silent! wall
Kalıplarım oldukça uzun ve onları birkaç otomatik cmcmde kullanıyorum, ancak bütünlüğü sağlamak için şöyle görünüyor:
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
Diğerlerinin de belirttiği gibi, vim, orijinal dosyanızın bulunduğu yerde oluşturulacak bir takas dosyasına (.swp) sahiptir, ancak .vimrc dosyanızda .swp dizinini ayarlayabilirsiniz.
Dizini oluşturmanız mkdir
ve ardından .vimrc'nizi bu konuma ayarlamanız gerekir.
set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
Vim-çalışma alanı eklentisi cevap verecek duruma oldukça özelleştirilebilir otomatik kaydetme özelliğine sahiptir. Varsayılan olarak, bir çalışma oturumu oturumundayken (ana özelliği) otomatik kaydetmeyi etkinleştirir, ancak aradığınız tek şeyse bunu otomatik olarak kaydetmeye ayarlayabilirsiniz ( let g:workspace_autosave_always = 1
).
Her metin değiştirildiğinde tamponu kaydetmeyi deneyin:
autocmd TextChanged,TextChangedI <buffer> silent write
Bu benim için çalışıyor.