È possibile effettuare il salvataggio automatico dei file Vim?


32

Alcuni elaboratori di testi e editor di testo salvano automaticamente i file che stiamo modificando di volta in volta, il che è molto conveniente per sopravvivere a incidenti brutti, ecc.

C'è un modo per fare in modo che Vim salvi automaticamente i nostri file dopo un intervallo specifico?

Risposte:


30

Non esiste un'opzione :help 'autosave'integrata , sebbene (in todo.txt) si riferisca a una descrizione di ciò che tale opzione potrebbe fare.

Un modo possibile per implementare ciò è utilizzare l' CursorHoldevento autocommand. Questo evento viene attivato quando l'utente non ha premuto un tasto per 'updatetime'millisecondi.

autocmd CursorHold * update

Il :updatecomando salva il buffer solo se viene modificato. Se si desidera che ciò accada anche quando la modalità di inserimento è attiva, è CursorHoldIpossibile aggiungere all'elenco eventi.

autocmd CursorHold,CursorHoldI * update

Un'altra alternativa è l' 'autowrite'opzione, che salverà il buffer prima di eseguire un comando esterno (utile per il salvataggio prima dell'esecuzione :make) o passare a un altro buffer.


Come puoi notare se funziona?
nilon,

@nilon Dovrebbe stampare sulla barra di stato che è stato salvato, proprio come se avessi premuto: w te stesso.
MaudPieTheRocktorate

12

Vim ha una funzione di salvataggio automatico, ma lo salva nel file di "recupero".

Quando modifichi un documento, ad es. MyFile.txtVim creerà il file revuntime .MyFile.txt.swp. Se il sistema si arrestasse in modo anomalo o la sessione dovesse morire, è possibile riconnettersi e ripristinare sostanzialmente da dove si era interrotto digitando:

vim -r MyFile.txt

Questo aprirà il file per la modifica e ripristinerà le ultime modifiche apportate al file.

È quindi possibile salvare la versione recuperata nel modo normale :w.

Sfortunatamente, quando esci da vim, lascerà .MyFile.txt.swptutto intorno e dovrai rimuoverlo manualmente:

rm .MyFile.txt.swp

Vedere la pagina man "Ripristino" anche nel capitolo 11


1
Quando si esce correttamente da Vim (ovvero con :wqo :q!o ZZo ecc.), I file di scambio devono essere rimossi automaticamente.
Doorknob,

4
@Doorknob non quando esci dopo un recupero ... ;-)
rolfl

8

Ho creato un plug -in vim-autosave che utilizza la funzione Vim 8 di Timer per salvare periodicamente i tuoi buffer.


Woah, i plugin Vim 8 stanno già uscendo. Sembra fantastico, Christian!
Thameera,

Grazie Christian. Sembra promettente. Mi chiedo se il plugin supporta file nuovi / non salvati. Non riesco a trovare la risposta nella documentazione del plug-in. Il mio computer ha deciso di riavviare la scorsa notte e ho avuto diverse note rapide sui nuovi buffer. Vim non ha creato o conservato file swp.
JAponte,

No, al momento non supporta file nuovi / non salvati. Se lo desideri, vai avanti e crea un problema da brivido.
Christian Brabandt,

2

Faccio salvare il mio Vim ogni volta che si perde la messa a fuoco.

autocmd FocusLost <your-patterns-here> silent! wall

I miei schemi sono piuttosto lunghi e li uso in diversi autocmd ma per completezza questo è come appare:

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

1

Come altri hanno indicato, vim ha un file di scambio (.swp) che verrà creato ovunque sia il tuo file originale, ma nel tuo file .vimrc, puoi impostare la directory .swp.

Dovrai creare la directory con mkdire quindi impostare il tuo .vimrc in quella posizione.

set backup " make backup files
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp

1

Il plug -in vim-workspace ha una funzione di salvataggio automatico abbastanza personalizzabile che può soddisfare le tue esigenze. Per impostazione predefinita, abilita il salvataggio automatico in una sessione dell'area di lavoro (la sua caratteristica principale), ma puoi impostarlo in modo da salvare sempre automaticamente se è tutto ciò che stai cercando ( let g:workspace_autosave_always = 1).


1

Prova a salvare il buffer ogni volta che il testo viene modificato:

autocmd TextChanged,TextChangedI <buffer> silent write

Questo funziona per me.

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.