Cosa significa Visual Studio per normalizzare le terminazioni di riga incoerenti?


238

Visual Studio mi dice occasionalmente:

Le terminazioni di riga nei seguenti file non sono coerenti. Vuoi normalizzare le terminazioni di linea?

Mi dà quindi un elenco a discesa con diversi standard o qualcosa del genere, come Windows, Mac, Unix e un paio di quelli Unicode.

Cosa significa e cosa accadrà se clicco Yes?


Visual Studio mi mostra lo stesso messaggio, ma il "file" a cui fa riferimento è in effetti una cartella! Cosa significa?!
Colonnello Panic,

Ho creato una piccola utility per farlo in un'intera directory o ricorsivamente attraverso una serie di directory per tutti i file di una determinata estensione (come * .c o * .h), sebbene io usi Delphi, l'utilità funziona per qualsiasi codice sorgente di Windows File. Codice sorgente incluso più binario (exe). Riporterà quali linee hanno avanzamenti di riga aggiuntivi (ad es. Ritorni a capo mancanti) o ritorni di trasporto extra (ad es. Avanzamenti di linea mancanti). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P

1
Può essere causato da git. Vedi anche: stackoverflow.com/questions/170961/…
Jess

2
Dovrebbero avere un'opzione nel menu a discesa che dice "favorisci il tipo di fine linea più comune dal resto del file / progetto".
MetaGuru,

Risposte:


213

Ciò che di solito significa che hai linee che terminano con qualcosa di diverso da una coppia di ritorno a capo / avanzamento riga. Succede spesso quando si copia e incolla da una pagina Web nell'editor di codice.

La normalizzazione delle terminazioni di riga sta solo assicurando che tutti i caratteri di fine riga siano coerenti. Impedisce che una riga finisca \r\ne un'altra che finisca con \ro \n; la prima è la coppia di fine linea di Windows, mentre le altre sono generalmente utilizzate per file Mac o Linux.

Dato che stai sviluppando in Visual Studio, ovviamente vorrai scegliere "Windows" dal menu a discesa. :-)


1
come finisce la linea senza ritorno a capo ...?
MetaGuru,

23
Quindi, perché il flip fa lo studio visivo del modo in cui finiscono le linee, a quanto pare riconosce tutti i diversi tipi, dovrebbe essere solo felice e zitto.
MetaGuru,

53
Ah, ma cosa succede se stai solo usando VS per riparare qualcosa che non è per Windows? Correzione rapida su un'utilità Linux o qualcosa che è dritto C / C ++ e non vuoi aggiungere CRLF? Aspetta, ora vuoi che MS legga la tua mente e sappia quale usare? <g> Il team VS ha torto in entrambi i casi, vero? Sheesh!
Ken White,

6
Oh snap Ken, hai ragione, se mi capita di modificare alcuni file che ho intenzione di compilare in Linux e so che il compilatore si strozzerà e morirà se non ha esattamente le terminazioni di linea di cui ha bisogno, allora avrò stato contento VS lasciami scegliere ... GRAZIE!
MetaGuru,

19
Il problema non è che VS non è in grado di far fronte ai finali di linea Unix - può. L'avvertimento indica che le terminazioni di riga sono incoerenti , ovvero alcune righe nel file sono CRLF e alcune sono LF. VS ce la farà, ma altre applicazioni nella catena degli strumenti potrebbero non esserlo, quindi ti avverte. Se non ti interessa, disattiva l'avviso: Opzioni -> Ambiente -> Documenti -> "Verifica la presenza di terminazioni di riga coerenti al caricamento". Questo avviso può essere molto utile se si lavora su prodotti su più piattaforme.
the_mandrill

75

Alcune righe finiscono con \n.

Alcune altre righe finiscono con \r\n.

Visual Studio ti suggerisce di far terminare tutte le linee allo stesso modo.


40

Se si utilizza Visual Studio 2012:

Vai al menu FileOpzioni di salvataggio avanzate → seleziona Tipo di terminazioni di linea come Windows (CR LF) .


1
Tale opzione non viene visualizzata nel menu File per Visual Studio 2010 Ultimate versione 10.0.40219.1 SP1Rel.
DOK,

1
@OK, nel mio menu File su Visual Studio 2010 versione Premium lo fa !!
Peter,

4
Se non riesci a vedere l'opzione puoi personalizzare il menu del tuo file andando su Strumenti-> Personalizza, andando sulla scheda comandi e aggiungendo un comando.
Rob

Esiste un'impostazione generale che influenza tutti i file insieme? È una seccatura farlo per tutte le fonti sotto una soluzione.
Klaus,

12

Per attivare / disattivare l'opzione, seguire i passaggi seguenti dalla barra dei menu :

StrumentiOpzioniAmbienteDocumentiVerifica la fine delle linee coerenti al caricamento


7

Il file che stai modificando è stato modificato con qualche altro editor che non utilizza le stesse terminazioni di riga, risultando in un file con terminazioni di riga miste.

I caratteri ASCII in uso per i finali di riga sono:

CR, ritorno carrello
LF, avanzamento riga

Windows = CRLF
Mac OS 9 o precedente =
Unix CR = LF


6

L' articolo di Newline di Wikipedia potrebbe aiutarti. Ecco un estratto:

Le diverse convenzioni newline spesso causano la visualizzazione errata di file di testo che sono stati trasferiti tra sistemi di tipi diversi. Ad esempio, i file originati su sistemi Unix o Apple Macintosh possono apparire come un'unica lunga riga su alcuni programmi in esecuzione su Microsoft Windows. Al contrario, quando si visualizza un file proveniente da un computer Windows su un sistema Unix, il CR aggiuntivo può essere visualizzato come ^ M o alla fine di ogni riga o come seconda interruzione di riga.


5

Significa che, ad esempio, alcune delle tue righe di testo con un <Carriage Return><Linefeed>(lo standard di Windows) e alcune terminano con solo un <Linefeed>(lo standard Unix).

Se si fa clic su "Sì", la fine delle righe nel file di origine verrà convertita per avere lo stesso formato.

Ciò non farà alcuna differenza per il compilatore (perché end-of-line conta come mero spazio bianco), ma potrebbe fare qualche differenza per altri strumenti (ad esempio, "diff" sul sistema di controllo della versione).


4

Non è solo Visual Studio ... Sarebbe qualsiasi strumento in grado di leggere file, compilatori, linker, ecc. Che dovrebbe essere in grado di gestirlo.

In generale (per lo sviluppo di software) accettiamo il problema della fine della linea multipiattaforma, ma lasciamo che il software di controllo della versione lo affronti.


1
Sono d'accordo. Meglio lasciare che il tuo sistema SCM lo faccia. Se si utilizza svn, puoi anche stackoverflow.com/questions/15687/...
kgriffs

Completamente d'accordo. Cosa succede se sto lavorando a un progetto e sono su Windows e il mio compagno di squadra sta usando il Mac. Camberemo costantemente CR in CRLF e viceversa. Meglio lasciare che SCM lo sottragga. La maggior parte delle risposte presuppone che le persone lavorino da sole o che tutti quelli che lavorano sul codice utilizzino Windows.
bytedev,

3

Quando si copia incolla qualcosa dal Web, è possibile ottenere le terminazioni di riga incoerenti.
Per risolvere questo problema, è possibile utilizzare l'estensione di Visual Studio "Line Endings Unifier" che può rendere coerente la fine della linea automaticamente durante il salvataggio del file.

inserisci qui la descrizione dell'immagine


2

Esiste un componente aggiuntivo per Visual Studio 2008 che converte il formato di fine riga quando un file viene salvato. Puoi scaricarlo qui: http://grebulon.com/software/stripem.php


Questo può aiutare quando si ottiene l'errore "incoerenti terminazioni di riga" da svn.
kgriffs
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.