Odpowiedzi:
Nie ma wbudowanej opcji, chociaż :help 'autosave'
(w todo.txt) odnosi się do opisu tego, co taka opcja mogłaby zrobić.
Jednym z możliwych sposobów realizacji tego jest użycie CursorHold
zdarzenia autocommand. To zdarzenie jest wyzwalane, gdy użytkownik nie naciska klawisza przez 'updatetime'
milisekundy.
autocmd CursorHold * update
:update
Komenda zapisuje tylko bufor, jeśli jest on modyfikowany. Jeśli chcesz, aby tak się stało, gdy tryb wstawiania jest aktywny, CursorHoldI
można go dodać do listy zdarzeń.
autocmd CursorHold,CursorHoldI * update
Inną alternatywą jest 'autowrite'
opcja, która zapisze bufor przed wykonaniem zewnętrznego polecenia (przydatne do zapisania przed uruchomieniem :make
) lub przełączeniem na inny bufor.
Vim ma funkcję automatycznego zapisywania, ale zapisuje go w pliku „odzyskiwania”.
Podczas edycji dokumentu, np. MyFile.txt
Vim utworzy plik odnawiania .MyFile.txt.swp
. Jeśli Twój system ulegnie awarii lub sesja umrze, możesz ponownie połączyć się i odzyskać dane z miejsca, w którym zostało przerwane, wpisując:
vim -r MyFile.txt
Spowoduje to otwarcie pliku do edycji i przywrócenie ostatnich wprowadzonych zmian.
Następnie możesz zapisać odzyskaną wersję w normalny sposób :w
.
Niestety, kiedy wyjdziesz z vima, opuści on wszystko .MyFile.txt.swp
i musisz go usunąć ręcznie:
rm .MyFile.txt.swp
Patrz „Odzyskiwanie” człowiek stronę też rozdział 11
:wq
lub :q!
lub ZZ
lub itp.) Pliki wymiany powinny zostać automatycznie usunięte.
Zrobiłem wtyczkę vim-autosave, która używa funkcji Vim 8 Timerów do okresowego zapisywania twoich buforów.
Sprawiam, że mój Vim zapisuje wszystko za każdym razem, gdy stracisz koncentrację.
autocmd FocusLost <your-patterns-here> silent! wall
Moje wzory są dość długie i używam ich w kilku autocmds, ale dla kompletności wygląda to tak:
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
Jak wskazali inni, vim ma plik wymiany (.swp), który zostanie utworzony w dowolnym miejscu, w którym znajduje się oryginalny plik, ale w pliku .vimrc możesz ustawić katalog .swp.
Musisz utworzyć katalog za pomocą, mkdir
a następnie ustawić .vimrc w tej lokalizacji.
set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp
Vim-roboczy Wtyczka ma dość konfigurowalny auto-save funkcji, które mogą zależności od potrzeb. Domyślnie włącza automatyczne zapisywanie w sesji obszaru roboczego (jego główna funkcja), ale możesz ustawić, aby zawsze zapisywało automatycznie, jeśli tylko tego szukasz ( let g:workspace_autosave_always = 1
).
Spróbuj zapisać bufor przy każdej zmianie tekstu:
autocmd TextChanged,TextChangedI <buffer> silent write
To działa dla mnie.