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.