git ignora i file temporanei di vim


238

Qual è il modo corretto per fare in modo che git ignori i file temporanei prodotti da vim in tutte le directory (a livello globale attraverso il sistema o localmente per un singolo progetto)?


6
Il modello *.sw?risolve lo standard .swpma anche le estensioni di file di scambio alternative come .swo.
Buley

7
@buley il tuo suggerimento ignorerà anche i .swffile. Scoraggerei fortemente questo, specialmente se stai costruendo un'app Flash.
stephenmurdoch,

1
@marflar Un buon punto. Lo stesso modello con prefisso con il file nascosto .dovrebbe impedirlo comunque.
Buley,

Oggi ho visto anche un .swx.
Richard,

2
Spettacoli esperimento che dopo aver creato 16 file di backup ( .tmp.swp, .tmp.swo, ..., .tmp.swa), vim crea .tmp.svz. Mi manca la pazienza di vedere cosa viene dopo .tmp.saa- forse .tmp.rzz? AGGIORNAMENTO: guardando l'origine ( src/memline.c, funzione findswapname()), si arrende dopo .saacon un errore: "E326: Sono stati trovati troppi file di scambio".
Keith Thompson,

Risposte:


392

I file temporanei di Vim terminano con ~ in modo da poter aggiungere al file .gitignorela riga

*~

Vim crea anche file di scambio con estensione swp e swo. per rimuovere quelli usa le linee:

*.swp
*.swo

Ciò ignorerà tutti i file temporanei di vim in un singolo progetto

Se vuoi farlo globalmente, puoi creare un file .gitignore nella tua casa (puoi dargli un altro nome o posizione) e usare il seguente comando:

git config --global core.excludesfile ~/.gitignore

Quindi devi solo aggiungere i file che vuoi ignorare a quel file


30
Vim creare file di swap successivamente denominati (.swp, .swo, etc.), per cui uso .*.sw*nel mio .gitignoreper nascondere tutti.
Ha disegnato Stephens

32
@DrewStephens, credo .*.sw?di essere più preciso. (Anche se ho visto la gente usare una variante di *.sw*sospettare che mi manchi qualcosa di veramente ovvio ...)
Morten Siebuhr

10
@Morten Secondo vimdoc.sourceforge.net/htmldoc/recover.html ,. *. S ?? li catturerebbe tutti su Unix (i decrementi .s da .swp a .saa).
Max Nanasy,

6
Solo per espandere su @MatrixFrog un eccellente commento un po '- poiché questa domanda è per Vim puoi trovare il .gitignore corretto in quel progetto qui .
SnapShot

17
Stai attento. github .*.s[a-w][a-z]ignorerà i .svgfile.
Jon

118

In alternativa puoi configurare vim per salvare i file di scambio in una posizione separata, ad esempio aggiungendo al tuo .vimrcfile linee simili alle seguenti :

set backupdir=$TEMP//
set directory=$TEMP//

Vedi questo consiglio vim per maggiori informazioni.


8
nota, in Mac OS X, puoi usare $TMPDIRper ottenere il vero tempdir :)
Alex Moore-Niemi,

5
La doppia barra in avanti dopo la tua directory preferita (io uso ~ / tmp //) impedisce le collisioni di denominazione dei file memorizzando il percorso completo. In questo modo, è ancora possibile modificare i file denominati, ad esempio, config.xml in due directory contemporaneamente.
Brian

1
Cosa $TEMPsignifica?
themefield

Nota ho anche dovuto aggiungere set undodir=$TEMP//, dal momento che salvo anche i file di annullamento persistenti.
Micah Lindstrom,

24

Questo è qualcosa che dovrebbe essere fatto solo per utente, non per repository. Se Joe usa emacs, vorrà che i file di backup di emacs vengano ignorati, ma Betty (che usa vi) vorrà ignorare i file di backup vi (in molti casi sono simili, ma esistono circa 24.893 editor comuni ed è abbastanza ridicolo provare a ignorare tutte le varie estensioni di backup.)

In altre parole, non mettere nulla dentro .gitignoreo core.excludesdentro $GIT_DIR/config. Inserisci invece le informazioni $HOME/.gitconfig(come suggerisce nunopolonia con --global.) Nota che "globale" significa per utente, non per sistema.

Se vuoi la configurazione attraverso il sistema per tutti gli utenti (cosa che non fai), avrai bisogno di un meccanismo diverso. (Forse con i template impostati prima dell'inizializzazione del repository.)


3
Apparentemente, Betty è molto più intelligente di Joe :-) Un buon consiglio e meritevole di un voto, anche se ho finito per usare la risposta di Martin (fissandola in Vim piuttosto che in Git).
paxdiablo,

11

Consiglierei anche di pensare a ignorare file come:

.*.swp
.*.swo

poiché potresti avere dei file che finiscono con .swp


5

Esci da vim prima di "git commit".

per vimutilizzare altre cartelle per i file di backup, ( /tmpad esempio):

set bdir-=.
set bdir+=/tmp

per fare in modo che vim non usi più la cartella corrente per i file .swp:

set dir-=.
set dir+=/tmp

L'uso -=, +=sarebbe generalmente buono, perché vim ha altri valori predefiniti per bdir, dir , non vogliamo cancellare tutto. Controlla la guida di Vim per ulteriori informazioni su bdir, dir :

:h bdir
:h dir

5
Fai attenzione a dove memorizzi i tuoi file di scambio vim. Potresti accidentalmente perdere credenziali o altri dati da un file che stai modificando: security.stackexchange.com/questions/65883/…
Mnebuerquo,

5

Ecco il codice VIM effettivo che genera le estensioni del file di scambio:

/* 
 * Change the ".swp" extension to find another file that can be used. 
 * First decrement the last char: ".swo", ".swn", etc. 
 * If that still isn't enough decrement the last but one char: ".svz" 
 * Can happen when editing many "No Name" buffers. 
 */
if (fname[n - 1] == 'a')        /* ".s?a" */
{   
    if (fname[n - 2] == 'a')    /* ".saa": tried enough, give up */
    {   
        EMSG(_("E326: Too many swap files found"));
        vim_free(fname);
        fname = NULL;
        break;  
    }
    --fname[n - 2];             /* ".svz", ".suz", etc. */
    fname[n - 1] = 'z' + 1;
}
--fname[n - 1];                 /* ".swo", ".swn", etc. */

Ciò genererà file di scambio del formato:

[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]

Il che è praticamente ciò che è incluso nel file gitignore di Github per VIM .

Come altri hanno giustamente notato, questo .gitignore ignorerà anche i file di immagine .svg e i file flash adobe .swf .


3

Ho scoperto che questo avrà git ignora i file temporanei creati da vim:

[._]*.s[a-w][a-z]
[._]s[a-w][a-z]
*.un~
Session.vim
.netrwhist
*~

Può anche essere visualizzato qui .


5
Ignorerà anche quei .swffile fastidiosi che continuano a spuntare ogni volta che crei un'app flash.
stephenmurdoch,

Il che funziona bene fino a quando non sei uno sviluppatore che deve controllare i tuoi file Flash :-)
paxdiablo,

1
Questo ignorerà .svgquale potrebbe essere un problema.
Bruno Bronosky,

1
È ridondante includere *.un~poiché hai*~
Bruno Bronosky il

2

sicuro,

devi solo creare un ".gitignore" nella home directory del tuo progetto e contenere

*.swp

questo è tutto

in un comando

project-home-directory$ echo '*.swp' >> .gitignore

4
Penso che echo *.swp >> .gitignoresia meglio evitare l'override del precedente .gitignore.
Cesar A. Rivas,

2
Non vuoi che la shell espanda il '*'. Quindi, usaecho '*.swp' >> .gitignore
Eddificato

Inoltre, non vuoi perderti accidentalmente uno di quei >personaggi. Una volta l'ho fatto per il passwdfile, quindi sono uscito :-)
paxdiablo l'

2
# VIM: Temperory files
*~

# VIM: Swap-files
[._]*.s[a-w][a-z]
[._]s[a-w][a-z]

# VIM: Commands :cs, :ctags
tags
cscope.*

# VIM session
Session.vim

# VIM: netrw.vim: Network oriented reading, writing, browsing (eg: ftp scp) 
.netrwhist

Il nome del file di scambio è normalmente lo stesso del file che si sta modificando, con l'estensione ".swp".

  • Su Unix, un '.' viene anteposto allo scambio di nomi di file nella stessa directory del file modificato. Ciò evita che il file di scambio venga visualizzato in un elenco di directory.
  • Su macchine MS-DOS e quando l'opzione 'shortname' è attiva, qualsiasi '.' nel nome del file originale viene sostituito con '_'.
  • Se questo file esiste già (ad esempio, quando si esegue il ripristino da un arresto anomalo) viene visualizzato un avviso e viene utilizzata un'altra estensione, ".swo", ".swn", ecc.
  • Un file esistente non verrà mai sovrascritto.
  • Il file di scambio viene eliminato non appena Vim interrompe la modifica del file.

La sostituzione di "." con '_' viene fatto per evitare problemi con filesystem compatibili MS-DOS (es. crossdos, multidos).

http://vimdoc.sourceforge.net/htmldoc/recover.html

http://www.vim.org/scripts/script.php?script_id=1075


0

Nel mio caso i file temporanei sono già stati sottoposti a commit da azioni precedenti, quindi la modifica di .gitignore non influirà su quei file sottoposti a commit ..., devi git rm files_to_be_ignored --cacheprima eseguire il commit, quindi il commit, quindi DONE.


0

Funziona su un Mac come notato da Alex Moore-Niemi:

set backupdir=$TMPDIR//
set directory=$TMPDIR//

Assicurati di usare TMPDIRe non TEMPDIR.


-4

Se si utilizza il controllo del codice sorgente. i file temporanei di VIM sono abbastanza inutili.
Quindi potresti voler configurare vim per non crearli.

Modifica il tuo ~ / .vimrc e aggiungi queste righe:

set nobackup
set noswapfile

6
Il controllo del codice sorgente non funziona con la stessa granularità dei backup o dei file di scambio di Vim. Anche se ti stavi impegnando dopo ogni salvataggio (o dopo un certo numero di caratteri o secondi - una semplificazione di ciò che ti danno i file di scambio di Vim), è ancora molto probabile che potresti voler modificare file che non sono controllati dall'origine (per i quali backup e gli swapfiles sono ancora desiderabili).
Chris Johnsen,

8
I file temporanei VIM sono estremamente utili per arresti anomali dell'editor e per diversi altri motivi. Disattivarli significa buttare via il bambino con l'acqua del bagno.
Brian Riehman,

5
@Arnis Dire, un'interruzione di corrente? O far morire la tua sessione X per qualche motivo. I file temporanei di VIM sono abbastanza importanti per IMO.
jrdioko,

1
@jrdioko X crash è il motivo per cui uno potrebbe voler usare screen(o dtachse non vuole tutte le funzionalità dello schermo). Le interruzioni di corrente sono gestite da UPS. I backup vengono eseguiti dal {tuo software preferito per il backup di tutti i file importanti}. Uso i file di scambio per essere avvisato quando provo a modificare i file che sono già stati modificati, i file di backup perché avere N + 1 ° posto con il backup non danneggia e annulla i file perché l'annullamento persistente è utile. Solo i file di annullamento sono un po 'importanti per me.
ZyX,

5
Faresti meglio a dire a Vim di archiviare i file temporanei altrove piuttosto che spegnerli completamente.
Kyle,
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.