Per impostazione predefinita, vim
lascia i file di scambio nella directory del mio progetto e, in caso di arresto anomalo, lascia i file di backup.
Posso impedirlo? O devo aggiornare tutti i .VCSignore
file dei miei progetti ?
Per impostazione predefinita, vim
lascia i file di scambio nella directory del mio progetto e, in caso di arresto anomalo, lascia i file di backup.
Posso impedirlo? O devo aggiornare tutti i .VCSignore
file dei miei progetti ?
Risposte:
Per impostazione predefinita, Vim non lascia indietro i file di backup. Sono semplicemente file temporanei che esistono mentre Vim sta salvando il buffer su disco. Come descritto in :help backup-table
questo comportamento, può essere controllato dalle opzioni 'backup'
e 'writebackup'
:
'backup' 'writebackup' action ~
off off no backup made
off on backup current file, deleted afterwards (default)
on off delete old backup, backup current file
on on delete old backup, backup current file
Per quanto riguarda i file di scambio, può essere utile raccoglierli in una directory dedicata. Questo può essere fatto con l' 'directory'
opzione. Per esempio
:set directory^=$HOME/.vim/tmp//
verrà aggiunto $HOME/.vim/tmp
alla testa dell'elenco di directory che Vim proverà a utilizzare durante la creazione di un file di scambio. Il trailing //
fa in modo che Vim codifichi l'intero nome del percorso nel file in modo che non vi siano collisioni con file con nomi simili da directory diverse.
Avvertenza : questo disabilita efficacemente la possibilità per Vim di notare se più utenti stanno provando a modificare lo stesso file poiché i file di scambio sono memorizzati in posizioni diverse.
Lo snippet di seguito (adattato dal vimrc di tpope ) disabiliterà anche il file di scambio per un buffer quando non viene modificato, in questo modo se Vim / il tuo computer si arresta in modo anomalo quando hai un mucchio di file aperti, i file di scambio lasciati indietro saranno solo per file modificati.
autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
\ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif
Avvertenza : poiché il file di scambio esiste solo quando il buffer viene modificato, questo ha un effetto simile all'impostazione 'directory'
. Se il buffer non è modificato, un altro Vim può iniziare a modificarlo senza preavviso. Se il secondo Vim salva prima che il primo apporti più modifiche, non verranno notate finché l'utente non tenta di salvare o qualcosa innesca Vim per verificare se il file è stato modificato.
Uso il mio .vimrc
su più macchine, inclusi i server condivisi. Non voglio necessariamente che le persone siano in grado di vedere i file su cui sto lavorando e mi piace mantenere la mia directory home relativamente pulita. Quindi questa è la mia soluzione che funzionerà bene su Linux e Mac OS X.
" Sets central temp file location, to prevent local default behavior.
if isdirectory($HOME . '/.vim/.tmp') == 0
:silent !mkdir -m 700 -p ~/.vim/.tmp > /dev/null 2>&1
endif
set backupdir=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
set directory=~/.vim/.tmp ",~/.local/tmp/vim,/var/tmp,/tmp,
Nota che questo creerà una .tmp
directory sotto ~/.vim
se non esiste già. Questa sarebbe la nuova home dei tuoi file di scambio. Per i file di annullamento, ho anche quanto segue nel mio .vimrc
(che è abbastanza simile):
if exists("+undofile")
" undofile -- This allows you to use undos after exiting and
" restarting. NOTE: only present in 7.3+
" :help undo-persistence
if isdirectory( $HOME . '/.vim/.undo' ) == 0
:silent !mkdir -m 700 -p ~/.vim/.undo > /dev/null 2>&1
endif
set undodir=~/.vim/.undo
set undofile
endif
Questo è ciò che faccio nel mio vimrc:
fun! MkdirIfNeeded(dir, flags, permissions)
if !isdirectory(a:dir)
call mkdir(a:dir, a:flags, a:permissions)
endif
endfun
" Set (& create if needed) a temp directory to keep backup & swap files
if has('win32')
let whoami = substitute(system("whoami /LOGONID"), '\n', '', '')
let tmpdir = 'C:/tmp/vim_' . whoami
else
let whoami = substitute(system("whoami"), '\n', '', '')
let tmpdir = '/var/tmp/vim_' . whoami
endif
call MkdirIfNeeded(tmpdir, 'p', 0700)
let &backupdir = tmpdir
let &dir = tmpdir
let &undodir = tmpdir
Verrà creato /var/tmp/vim_<username>
e utilizzato per archiviare tutti i file relativi a VIM. Mantenere pulita la directory del progetto.
L'uso di whoami
assicura che è possibile utilizzare vimrc a livello globale (ad es. Per l'utente e root) mentre si utilizzano ancora directory separate; se non ti serve, puoi sostituirlo con una directory codificata per un avvio più rapido. Puoi anche usare la ~/.vim/
directory, ma mi piace usarla /var/tmp
perché di solito è un filesystem separato.
Uso /var/tmp
perché /tmp
viene spesso cancellato al riavvio. Probabilmente non vuoi che questa directory sia scrivibile in tutto il mondo, poiché le persone potrebbero quindi posizionare i file lì per fare cose potenzialmente dannose quando apri un file.
adduser
o qualunque cosa tu stia usando per creare utenti. In ogni caso, la maggior parte delle persone usa Vim su macchine affidabili (ma il tuo commento è buono, in quanto tale).
$HOME
qualche parte.
/var/
è un filesystem diverso. La teoria è che impedirà un sacco di scritture su /
, /usr
o /home
, portando a meno frammentazione e rischio di corruzione dei file in caso di crash ... Questo è anche il motivo per cui le cassette postali e le cose sono attive /var
per impostazione predefinita, e non nella homedir ...
/var/tmp
è sempre scrivibile dal mondo, è una directory temp di sistema. (Beh, puoi cambiarlo in non essere, ma questa è una di quelle cose in cui i sistemi simili a Unix sono felici di lasciarti tenere i pezzi dopo averlo rotto). Se hai un altro utente sul sistema, lui / lei potrebbe creare/var/tmp/vim_«your_username»
con le autorizzazioni di sua scelta. E poi riempilo con collegamenti simbolici ai tuoi file importanti, che probabilmente saranno distrutti dai tempfile di VIM.