Come impedire a vim di creare (e lasciare) file temporanei?


163

Perché vim crea <filename>~file? C'è un modo per disabilitarlo?

Se è per il backup (o qualcosa del genere), uso git per quello.

Inoltre, anche questi .<filename.with.path.hints>.swpfile.

Come faccio a dire a Vim di non creare quelli, o almeno di ripulire dopo se stesso?

MODIFICARE

whoops, duplicato:

Perché Vim salva i file con un'estensione ~?

Da lì ho adottato la risposta di rogeriopvl .

copia integrale:

set nobackup       "no backup files
set nowritebackup  "only in case you don't want a backup file while editing
set noswapfile     "no swap files

13
Git non ti aiuterà mai a recuperare il lavoro dopo un arresto anomalo del sistema. Git può anche ignorare i tuoi file * .swp. = D
vmassuchetto,



lol qualcuno ha contrassegnato seriamente questa domanda come duplicata dopo sei anni di pubblicazione?
hasen

Risposte:


80

Consiglio vivamente di continuare a lavorare con i file di scambio (in caso di arresto anomalo di Vim).

È possibile impostare la directory in cui sono memorizzati i file di scambio, in modo che non ingombrino le normali directory:

set swapfile
set dir=~/tmp

Guarda anche

:help swap-file

4
beh, non ho mai avuto bisogno di quelli con notepad ++, a meno che tu non dica che vim andrà in crash troppo spesso!
hasen

8
no, non stavo insinuando che vim si schianta troppo spesso (anche se l'ho visto crash). Ma per il mio ambiente di lavoro, la connessione di rete a qualche host su cui sto lavorando è piuttosto instabile, quindi si verifica una modifica interrotta. I file di scambio aiutano lì.
user55400

9
@ user55400 sentito parlare di GNU / Screen? (o tmux, o questa alternativa giapponese)
Elazar Leibovich,

Ho aggiunto questo al mio file _vimrc su Windows e sto ancora ricevendo file ~ file. Non sto facendo qualcosa correttamente?
FilBot3,

2
@noircc Vorrei sconsigliare l'utilizzo di / tmp. Nel caso in cui l'intero sistema si arresti in modo anomalo e sia necessario riavviare, i file di swap scompariranno.

57

Mettilo nel tuo file di configurazione .vimrc.

set nobackup

5
Lo abbiamo fatto su Windows 8.1 con Vim. I file di scambio sono ancora presenti.
Shaun Luttin,

1
Shaun, potrebbe essere necessario aggiungere "set noswapfile" anche al tuo .vimrc per impedire la creazione di nuovi file di swap, come indicato nella modifica alla domanda originale.
Earl Zedd,

Che dire della :seduta come prefisso prima della setparola chiave? È richiesto? Non sembra un commento ..
Stephane,

@Stephane un :prefisso significa che è fatto in modalità comando, ma non è necessario un :quando si scrive il tuo vimrc
TankorSmash

Non è proprio una buona idea. Quanto sopra di lasciare questi file nella cartella temp / è già molto meglio.
MonsieurMan,

36

; Per gli utenti di Windows tornare alla directory temporanea

set backup
set backupdir=C:\WINDOWS\Temp
set backupskip=C:\WINDOWS\Temp\*
set directory=C:\WINDOWS\Temp
set writebackup

6
Ho dovuto aggiungere set undodir = C: \ WINDOWS \ Temp

Questo non ha funzionato per me - ho dovuto usare set dir = $ TEMP invece
Frank Schmitt il

10

Ho creato un plug-in chiamato "noswapsuck" che abilita il file di scambio solo quando il buffer contiene modifiche non salvate. Una volta salvate le modifiche, il file di scambio viene cancellato. Quindi, i file di scambio che contengono lo stesso contenuto del file sul disco verranno rimossi.

Prendilo qui: noswapsuck.vim

Ha funzionato bene per me, ma non l'ho mai pubblicizzato prima, quindi gradirei un feedback.

vantaggi:

  • Gli unici file di swap che rimangono sul tuo disco saranno importanti file di swap che differiscono effettivamente dal file!

svantaggi:

  • Se il buffer ha un file di scambio, non verrà rilevato alla prima apertura del file. Sarà rilevato solo quando swapfileè abilitato, ovvero quando inizi a modificare il buffer. È fastidiosamente in ritardo e ti interromperà. (Risolto: ora controlliamo un file di scambio preesistente quando viene aperto un buffer, riattivando temporaneamente l' swapfileopzione).

  • Se si lavora in un ambiente in cui si desidera ridurre al minimo le scritture su disco (ad esempio a basso consumo o file montati su una rete o la modifica di un file di grandi dimensioni), non è l'ideale continuare a rimuovere e ricreare il file di scambio su ogni salva e modifica. In tali situazioni, puoi fare:

    :let g:NoSwapSuck_CloseSwapfileOnWrite = 0
    

    che manterrà il file di scambio dopo una scrittura, ma lo rimuoverà comunque quando il buffer perde lo stato attivo.

A proposito, ho un altro piccolo plugin :DiffAgainstFileOnDiskche può essere molto utile dopo aver colpito (r)ecover, per verificare se il buffer che hai recuperato è più nuovo o più vecchio del file esistente o identico ad esso.


8

Su Windows aggiungi le seguenti righe a _vimrc

" store backup, undo, and swap files in temp directory
set directory=$HOME/temp//
set backupdir=$HOME/temp//
set undodir=$HOME/temp//

5

Questa risposta si applica all'utilizzo di gVim su Windows 10. Non posso garantire gli stessi risultati per altri sistemi operativi.

Inserisci:

set nobackup
set noswapfile
set noundofile

Nel tuo file _vimrc.

Nota: questa è la risposta diretta alla domanda (per Windows 10) e probabilmente non è la cosa più sicura da fare (leggi le altre risposte), ma questa è la soluzione più veloce nel mio caso.


0

Ho questa configurazione nel mio Ubuntu .vimrc. Non vedo alcun file di scambio nei miei file di progetto.

set undofile
set undolevels=1000         " How many undos
set undoreload=10000        " number of lines to save for undo

set backup                        " enable backups
set swapfile                      " enable swaps
set undodir=$HOME/.vim/tmp/undo     " undo files
set backupdir=$HOME/.vim/tmp/backup " backups
set directory=$HOME/.vim/tmp/swap   " swap files

" Make those folders automatically if they don't already exist.
if !isdirectory(expand(&undodir))
    call mkdir(expand(&undodir), "p")
endif
if !isdirectory(expand(&backupdir))
    call mkdir(expand(&backupdir), "p")
endif
if !isdirectory(expand(&directory))
    call mkdir(expand(&directory), "p")
endif
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.