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


180

Ho scoperto che durante l'utilizzo di Vim su Windows Vim salva il file, un .ext.swpfile che viene eliminato alla chiusura della finestra di Vim e un .ext~file.

Presumo che il .ext.swpfile sia un backup di sessione in caso di arresto anomalo di Vim. Qual è lo scopo del .ext~file comunque? È un file di backup permanente? È fastidioso perché vorrei copiare tutti i file su cui sto lavorando sul mio host, senza questi duplicati. Come posso disattivarlo o , se è lì per una buona ragione, nascondere i file ?


Hai qualche file aperto contemporaneamente in più di un posto, creeranno un file .ext.swp.
Dirkgently

2
dirkgently: No, qui posso aprire un file nell'unica finestra di vim e creerà il file .swp. Non mi preoccupo troppo perché viene rimosso quando salvo / chiudo la finestra.
Ross

Risposte:


221

Il *.ext~file è un file di backup, contenente il file com'era prima di modificarlo.

Il *.ext.swpfile è il file di scambio, che funge da file di blocco e contiene la cronologia di annullamento / ripetizione, nonché qualsiasi altra informazione interna necessaria a Vim. In caso di crash puoi riaprire il tuo file e Vim ripristinerà il suo stato precedente dal file di scambio (che trovo utile, quindi non lo spengo).

Per disattivare la creazione automatica dei file di backup, usa (nel tuo vimrc):

set nobackup
set nowritebackup

Dove nowritebackupcambia il comportamento predefinito "salva" di Vim, che è:

  1. scrivere buffer nel nuovo file
  2. elimina il file originale
  3. rinominare il nuovo file

e fa scrivere a Vim il buffer nel file originale (con il rischio di distruggerlo in caso di errore I / O). Ma eviti di "saltare i file" sul desktop di Windows con esso, che è il motivo principale per cui ho messo nowritebackupin atto.


7
+1 per you prevent "jumping files" on the Windows desktop. Ho cercato su Google e trovato questa risposta
Merlyn Morgan-Graham,

1
In realtà - devo avere entrambi nobackupe nowritebackup? C'è un modo per scrivere una copia del file come backup, ma non scrivere / cancellare / rinominare cose?
Merlyn Morgan-Graham,

@Merlyn: Se hai backup(invece di nobackup), Vim creerà un backup (il *.ext~file). Questo è completamente estraneo a nowritebackup.
Tomalak,

6
V'è una tabella che descrive il comportamento differente tra combinazione di queste opzioni: help backup-table. Si scopre che l'impostazione né nobackupnowritebackup, ma l'impostazione backupcopy=yesrisolve anche il problema del "salto". Questo può ferire perf, però, così per ognuno di loro
Merlyn Morgan-Graham,

27
Invece di spegnere, eseguire il backup in una directory set backupdir=~/.vim/backupin .vimrc o _vimrc su windows
tsukimi

224

Penso che la soluzione migliore sia inserire queste righe nel tuo file vimrc

set backupdir=~/vimtmp//,.
set directory=~/vimtmp//,.

La prima riga è per i file di backup, la seconda riga per i file di scambio. La doppia barra alla fine assicura che non ci siano conflitti nel caso in cui due file abbiano lo stesso nome, vedere i commenti (al momento di questa modifica questa opzione è onorata solo per i file di scambio, non ancora per i file di backup ). La ,.consentono vimdi utilizzare la directory corrente se il primo non esiste.

Devi creare una directory nella tua home directory chiamata vimtmp affinché funzioni. Inoltre, controlla che i backup siano abilitati nella tua configurazione (aggiungi in set backupcaso contrario).

In questo modo ottieni i vantaggi di entrambi i mondi, non devi vedere i file, ma se qualcosa viene vanificato puoi andare a prendere il tuo file di backup da vimtmp. Non dimenticare di pulire la directory ogni tanto.


22
+1 In realtà ho impostato il mio su ~ / .vim / tmp, ma in entrambi i casi, questo mi ha salvato il culo in più di un'occasione.
JC Yamokoski,

11
Perché ti serve ,. alla fine di ogni riga?
Shin

9
@shin Vim utilizzerà la prima directory disponibile, quindi in questo caso se ~ / vimtmp non esiste utilizzerà la directory di lavoro corrente
xixixao

3
@SalmanPK In un mondo ideale non dovresti modificare i file di configurazione direttamente su server accessibili pubblicamente
Score_Under

12
Usa due barre alla fine del percorso. Ad esempio, impostare backupdir = ~ / .vim / .backup // - "//" alla fine della directory significa che i nomi dei file verranno creati dal percorso completo al file con tutti i separatori di percorso sostituiti in percentuale "% " cartello. Ciò garantirà l'unicità del nome file nella directory di preservazione.
Hacknightly,

25

Per disattivare quei file, basta aggiungere queste righe a .vimrc (file di configurazione vim sul sistema operativo basato su unix):

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

12
:set nobackup 

disattiverà i backup. Puoi anche impostare un backupdir se desideri ancora quei file di backup ma in una cartella centrale. In questo modo la directory di lavoro non è piena di ~ file.

Ulteriori informazioni sui backup sono disponibili in : backup .


12

E puoi anche impostare una diversa estensione di backup e dove salvare quei backup (preferisco ~/.vimbackupssu Linux). Usavo i backup "con versione", tramite:

au BufWritePre * let &bex = '-' . strftime("%Y%m%d-%H%M%S") . '.vimbackup'

Ciò imposta un'estensione di backup dinamica ( ORIGINALFILENAME-YYYYMMDD-HHMMSS.vimbackup).


3
potresti voler includere come impostare la directory di backup, ovvero inserendo il set backupdir=~/.vimbackupstuo ~ / .vimrc
rampion

1
L'aiuto di vim descrive completamente questa tecnica. Vedi:help backupext
netjeff,

8

Inserisci questa linea nel tuo vimrc:

set nobk nowb noswf noudf " nobackup nowritebackup noswapfile noundofile


Nel quello sarebbe il:

C:\Program Files (x86)\vim\_vimrc

file per la configurazione vim dell'intero sistema per tutti gli utenti.

L'impostazione dell'ultimo noundofileè importante in Windows per impedire la creazione di *~file tilda dopo la modifica.


Vorrei che Vim avesse quella linea inclusa per impostazione predefinita. A nessuno piacciono le brutte directory.

Consenti all'utente di scegliere se e come desidera abilitare prima le funzionalità avanzate di backup / annullamento dei file.

Questa è la parte più fastidiosa di Vim.

Il prossimo passo potrebbe essere la configurazione:

set noeb vb t_vb= " errorbells visualbell

per disabilitare il segnale acustico anche :-)


Grazie mille per questo! "noundofile" è stata l'opzione che alla fine si è sbarazzata di quella terribile cucciolata. (E sono d'accordo al 100% con tutto ciò che hai scritto nel tuo post!)
pwmusic,

6

Hai ragione che il .swpfile viene utilizzato da Vim per il blocco e come file di ripristino.

Prova a inserire il set nobackuptuo vimrc se non vuoi questi file. Vedi i documenti Vim per varie opzioni relative al backup se vuoi l'intero scoop o vuoi invece avere file .bak ...


+1 per menzionare lo scopo come file di blocco. Non ci ho pensato.
Tomalak

5

L'unica opzione che ha funzionato per me è stata quella di inserire questa riga nel mio file ~ / .vimrc

impostare noundofile

Le altre opzioni che si riferiscono ai file di backup non hanno impedito la creazione dei file temporanei che terminano con ~ (tilde)


Questo alla fine ha funzionato per me. Perché questo non è menzionato in altre risposte? Ciò rimuove i .<filename>.un~file : mentre le altre opzioni rimuovono solo i <filename>~file.
JLT

0

Ho dovuto aggiungere set noundofilea ~ _gvimrc

La directory "~" può essere identificata modificando la directory con il cd ~comando

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.