Disabilitare la creazione di file di scambio in vim


216

C'è un modo per disabilitare la .swpcreazione di file in vim? o almeno crearli tutti in un unico posto in modo che io possa trovarli ed eliminarli facilmente.

Li trovo particolarmente fastidiosi quando copio la directory principale durante la modifica allo stesso tempo. Ovviamente so che posso usare find -exec per trovarli ed eliminarli. Ma voglio una soluzione più pratica.



Risposte:


255

Per disabilitare i file di scambio da vim, digitare

:set noswapfile

Per disabilitare i file di scambio in modo permanente, aggiungi quanto segue al tuo ~/.vimrcfile

set noswapfile

Per maggiori dettagli consultare i documenti di Vim su swapfile


6
I file di scambio sono buoni se il tuo editor si arresta in modo anomalo (interruzione di corrente, ecc.), Tieni a mente.
koonse

1
Un'altra opzione è ancora utilizzare il file di scambio, ma lasciarlo in memoria, quindi non continuerà a scrivere sul disco rigido. Questo non può proteggerti dalla perdita del file durante un'interruzione, ma se apri lo stesso file in un'altra vim, ti dirà immediatamente. Il comando è: set directory = / dev / shm
webbertiger

La risposta di trusktr consente di mantenere i vantaggi dei file di scambio risolvendo al contempo le preoccupazioni dell'OP.
jpaugh

Dall'interno di vim puoi anche disabilitare il file di scambio durante l'apertura di un file::noswapfile edit /path/to/file
Torkel Bjørnson-Langen

La mia filosofia personale sulla perdita di dati è DBAB e salva spesso ...
Samy Bencherif,

156

Impostare le seguenti variabili in .vimrc o / etc / vimrc per fare in modo che vim inserisca i file di scambio, backup e annullamento in una posizione speciale anziché nella directory di lavoro del file che si sta modificando:

set backupdir=~/.vim/backup//
set directory=~/.vim/swap//
set undodir=~/.vim/undo//

L'uso di doppie barre finali nel percorso indica a vim di abilitare una funzione in cui evita le collisioni di nomi. Ad esempio, se si modifica un file in una posizione e un altro file in un'altra posizione ed entrambi i file hanno lo stesso nome, non si desidera che si verifichi una collisione del nome in ~ / .vim / swap /. Se si specifica ~ / .vim / swap // con due barre finali vim creerà i file di scambio utilizzando l'intero percorso dei file in fase di modifica per evitare collisioni (le barre nel percorso del file verranno sostituite dal simbolo percentuale%).

Ad esempio, se modifichi /path/one/foobar.txt e /path/two/foobar.txt, vedrai due file di scambio in ~ / .vim / swap / che sono chiamati% path% one% foobar.txt e% path% two% foobar.txt, rispettivamente.


Potresti anche aggiungere che un po 'di tempo i file di backup salvati potrebbero salvare una skin degli sviluppatori
Bartek Skwira,

Commento: (non critica), sembra buono soprattutto per lo sviluppo perché per la lettura di file e piccole modifiche o la conservazione di note non importanti che è una grande parte dell'uso di vim per molte persone, sembra che un lavoro di contabilità extra sia meglio tralasciato. Personalmente preferisco che tutti i lavori non abbiano swap o altri backup automatici. Se ho davvero bisogno di sviluppare qualcosa, preferirei avere un framework di livello più elevato per proteggermi, preferibilmente con il controllo della versione del codice, ecc.
j riv

@LelaDax Vero, il più delle volte questi file sono per lo più inutili perché uso git per tutto il mio codice sorgente. In rare occasioni (come un incidente) sono tornati utili. Ma in realtà, la cronologia degli annullamenti che uso molto. È molto più facile navigare così velocemente che controllare Git si impegna a visualizzare la cronologia precedente. gundo rende piacevole e facile la navigazione dell'albero di annullamento. Potrei vivere senza lo scambio e i file di backup.
trusktr,

26
Cordiali saluti per le persone che sono nuove (come me haha ​​...) devi solo andare a ~ / .vim / e creare le directory tu stesso. Non li creerà automaticamente per te.
Agosto

1
Puoi anche scrivere un po 'di codice nel tuo vimrc per creare automaticamente le cartelle per te, che è quello che ho fatto nel mio. Quindi, sui nuovi sistemi, ottengo solo il mio vimrc e al resto ci pensiamo noi.
trusktr,

42

Ho trovato la risposta qui :

vim -n <file>

apre il file senza file di scambio.

Inoltre:

set dir=/tmp

in .vimrccrea i file di scambio in /tmp.


E i *.ext~file di backup? Esiste un'opzione da riga di comando per disabilitarli?
Salman von Abbas,

È molto utile per quei file enormi una tantum! Grazie.
Felipe Alvarez,

28

ecco le mie impostazioni personali di backup ~ / .vimrc

" backup to ~/.tmp 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set backupskip=/tmp/*,/private/tmp/* 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set writebackup

13

Concordo con coloro che si chiedono perché Vim abbia bisogno di tutte queste cose di "disaster recovery" quando nessun altro editor di testo si prende la briga. Non voglio che vim crei QUALSIASI file extra nella directory del file modificato quando lo sto modificando, grazie mille. A tal fine, ho questo _vimrcper disabilitare i file di scambio e spostare i file di "backup" nella directory Temp:

" Uncomment below to prevent 'tilde backup files' (eg. myfile.txt~) from being created
"set nobackup

" Uncomment below to cause 'tilde backup files' to be created in a different dir so as not to clutter up the current file's directory (probably a better idea than disabling them altogether)
set backupdir=C:\Windows\Temp

" Uncomment below to disable 'swap files' (eg. .myfile.txt.swp) from being created
set noswapfile

9
Penso che il fatto che altri editor non si preoccupino di ciò si riflette male sugli altri editor più di quanto non rifletta male su vi (m). La scelta di rendere la stessa directory il posto predefinito in cui mettere questi file è un po 'sfortunata, sebbene almeno marginalmente difendibile. (ad es., in un ambiente multiserver, altamente cross-montato, potrebbe non essere ovvio dove trovare un file di ripristino nel momento in cui ne hai più urgente bisogno)
Domingo Ignacio,

3
La gestione dei file di scambio di Vim è semplicemente orribile. L'ho usato per recuperare i dati persi forse 5 volte. Ma sono stato seccato di recuperare un file di scambio circa 9.000 volte, che è invariabilmente identico al file comunque, o peggio ancora una versione non aggiornata. Potrebbe essere una buona funzionalità se il processo di recupero non ha funzionato in modo così terribile. recover.vim aiuta un po ', ma è ancora troppo interattivo.
Joeytwiddle,

3
Sublime Text ha disaster recovery. Lo adoro! Non devo nemmeno salvare un file, quando riprendo le modifiche apportate, salvate o meno, vengono ripristinate.
leetNightshade

Ho un semplice autocomando che scrive tutte le modifiche non appena vengono apportate, rendendo inutili sia i file di scambio che i backup.
martedì

2
@ TorkelBjørnson-Langen Probabilmente è colpa mia per riavviare il mio computer senza chiudere tutte le mie sessioni Vim e quindi essere paranoico su quali file di ripristino sono effettivamente validi. Comunque ho cercato di ottenere il meglio da entrambi i mondi, scrivendo un plugin che mantiene un file di scambio solo quando ci sono modifiche non salvate: vim-swap-is-awesome.vim
joeytwiddle

7

È possibile impostare backupdir e la directory su null per disabilitare completamente i file di scambio, ma si consiglia generalmente di metterli semplicemente in una directory centralizzata. Vim si prende cura di assicurarsi che non ci siano collisioni di nomi o cose del genere; quindi, questa è un'alternativa completamente sicura:

set backupdir=~/.vim/backup/
set directory=~/.vim/backup/

3
È necessario aggiungere una doppia barra //alla fine dei percorsi in modo da poter modificare due file con lo stesso nome contemporaneamente.
Samuel O'Malley,

Grazie, @ SamuelO'Malley. Cosa fa //
Monokrome

Dai un'occhiata :help directoryse vuoi leggere i documenti per questo. La doppia barra indica a vim di codificare l'intero percorso del file nel nome del file di scambio, ad esempio %home%sam%dotfiles%.gitignore.swp, anziché solo .gitignore.swp.
Samuel O'Malley,

3

Se inserisci il set directory=""tuo file exrc, disattiverai il file di scambio. Tuttavia, in tal modo si disabiliterà il ripristino.

Maggiori informazioni qui .


3

Se stai usando git, puoi aggiungere *.swpa .gitignore.


Penso che sia quello che serve alla maggior parte degli utenti! La disattivazione dei file di scambio è una cattiva pratica.
DenisKolodin,

2

non creare alcun file di scambio vim solo per un determinato file

autocmd bufenter  c:/aaa/Dropbox/TapNote/Todo.txt :set noswapfile

1
O per tutti i file in una determinata directory, sembra funzionare quanto segue (solo brevi test):autocmd bufenter c:/aaa/Dropbox/TapNote/* :set noswapfile
scottkosty

1

Per chiunque cerchi di impostarlo per i progetti Rails, aggiungi

set directory=tmp,/tmp

nel tuo

~/.vimrc

Quindi i file .swp saranno nella loro posizione naturale - la directory tmp (per progetto).

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.