Was bedeutet Visual Studio unter Normalisierung inkonsistenter Zeilenenden?

238

Visual Studio sagt mir gelegentlich:

Die Zeilenenden in den folgenden Dateien sind nicht konsistent. Möchten Sie die Zeilenenden normalisieren?

Es gibt mir dann eine Dropdown-Liste mit verschiedenen Standards oder etwas, wie Windows, Mac, Unix und ein paar Unicode-Standards.

Was bedeutet das und was passiert, wenn ich klicke Yes?

MetaGuru
quelle
Visual Studio zeigt mir dieselbe Nachricht, aber die "Datei", auf die es verweist, ist tatsächlich ein Ordner! Was bedeutet das?!
Colonel Panic
Ich habe ein kleines Dienstprogramm erstellt, um dies für ein gesamtes Verzeichnis oder rekursiv durch eine Reihe von Verzeichnissen für alle Dateien einer bestimmten Erweiterung (wie * .c oder * .h) zu tun. Obwohl ich Delphi verwende, funktioniert das Dienstprogramm für jeden Windows-Quellcode Dateien. Quellcode enthalten plus Binär (exe). Es wird gemeldet, welche Zeilen zusätzliche Zeilenvorschübe (dh fehlende Zeilenumbrüche) oder zusätzliche Zeilenumbrüche (dh fehlende Zeilenumbrüche) haben. docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P
1
Kann verursacht werden durch git. Siehe auch: stackoverflow.com/questions/170961/…
Jess
2
Sie sollten eine Option in der Dropdown-Liste haben, die besagt, dass der gängigste Zeilenende-Typ vom Rest der Datei / des Projekts bevorzugt wird.
MetaGuru

Antworten:

213

Das bedeutet normalerweise, dass Sie Zeilen haben, die mit etwas anderem als einem Wagenrücklauf / Zeilenvorschub-Paar enden. Dies passiert häufig, wenn Sie eine Webseite kopieren und in den Code-Editor einfügen.

Durch das Normalisieren der Zeilenenden wird lediglich sichergestellt, dass alle Zeilenendenzeichen konsistent sind. Es verhindert, dass eine Zeile mit \r\nund eine andere mit \roder endet \n. Das erste ist das Windows-Zeilenendpaar, während die anderen normalerweise für Mac- oder Linux-Dateien verwendet werden.

Da Sie in Visual Studio entwickeln, möchten Sie natürlich "Windows" aus der Dropdown-Liste auswählen. :-)

Ken White
quelle
1
Wie endet die Linie ohne Wagenrücklauf ...?
MetaGuru
23
Warum kümmert sich das Flip Studio darum, wie die Zeilen enden? Es erkennt anscheinend all die verschiedenen Typen. Es sollte einfach glücklich und still sein.
MetaGuru
53
Ah, aber was ist, wenn Sie nur VS verwenden, um etwas zu reparieren, das nicht für Windows geeignet ist? Schnelle Lösung für ein Linux-Dienstprogramm oder etwas, das direkt C / C ++ ist, und Sie möchten nicht, dass CRLFs hinzugefügt werden? Warten Sie - jetzt möchten Sie, dass MS Ihre Gedanken liest und weiß, welche Sie verwenden sollen? <g> Das VS-Team ist so oder so falsch, nicht wahr? Meine Güte!
Ken White
6
Oh, schnapp Ken, du hast Recht, wenn ich zufällig einige Dateien bearbeite, die ich unter Linux kompilieren möchte, und ich weiß, dass der Compiler ersticken und sterben wird, wenn er nicht genau die Zeilenenden hat, die er benötigt, dann werde ich haben war froh, dass VS mich wählen ließ ... DANKE!
MetaGuru
19
Das Problem ist nicht, dass VS Unix-Zeilenenden nicht bewältigen kann - es kann. Die Warnung weist Sie darauf hin, dass die Zeilenenden inkonsistent sind - dh einige Zeilen in der Datei sind CRLF und andere LF. VS wird damit fertig, andere Anwendungen in Ihrer Werkzeugkette jedoch möglicherweise nicht. Daher werden Sie gewarnt. Wenn Sie sich nicht darum kümmern, deaktivieren Sie die Warnung: Optionen -> Umgebung -> Dokumente -> 'Beim Laden auf konsistente Zeilenenden prüfen'. Diese Warnung kann sehr nützlich sein, wenn Sie plattformübergreifend an Produkten arbeiten.
the_mandrill
75

Einige Zeilen enden mit \n.

Einige andere Zeilen enden mit \r\n.

Visual Studio schlägt vor, dass alle Zeilen gleich enden.

Alex Reitbort
quelle
40

Wenn Sie Visual Studio 2012 verwenden:

Gehen Sie zum Menü DateiErweiterte Speicheroptionen → Wählen Sie Zeilenendtyp als Windows (CR LF) .

pankaj
quelle
1
Diese Option wird in meinem Datei-Menü für mein Visual Studio 2010 Ultimate Version 10.0.40219.1 SP1Rel nicht angezeigt.
DOK
1
@DOK, in meinem Datei-Menü in der Visual Studio 2010 Premium-Version ist dies der Fall !!
Peter
4
Wenn Sie die Option nicht sehen, können Sie Ihr Dateimenü anpassen, indem Sie zu Extras-> Anpassen gehen, zur Registerkarte Befehle gehen und einen Befehl hinzufügen.
Rob
Gibt es eine allgemeine Einstellung, die alle Dateien zusammen betrifft? Es ist ein Schmerz, dies für alle Quellen unter einer Lösung zu tun.
Klaus
12

Führen Sie die folgenden Schritte in der Menüleiste aus, um die Option ein- oder auszuschalten :

ExtrasOptionenUmgebungDokumenteÜberprüfen Sie beim Laden, ob die Zeilenenden konsistent sind

Codierung von Yoshi
quelle
7

Die Datei, die Sie bearbeiten, wurde mit einem anderen Editor bearbeitet, der nicht dieselben Zeilenenden verwendet. Dies führt zu einer Datei mit gemischten Zeilenenden.

Die für Zeilenenden verwendeten ASCII-Zeichen sind:

CR, Wagenrücklauf
LF, Zeilenvorschub

Windows = CRLF
Mac OS 9 oder früher = CR
Unix = LF

Monowerker
quelle
6

Der Wikipedia- Newline-Artikel könnte Ihnen helfen. Hier ist ein Auszug:

Die unterschiedlichen Newline-Konventionen führen häufig dazu, dass Textdateien, die zwischen Systemen unterschiedlichen Typs übertragen wurden, falsch angezeigt werden. Beispielsweise können Dateien, die von Unix- oder Apple Macintosh-Systemen stammen, in einigen Programmen, die unter Microsoft Windows ausgeführt werden, als einzelne lange Zeile angezeigt werden. Umgekehrt kann beim Anzeigen einer Datei, die von einem Windows-Computer auf einem Unix-System stammt, die zusätzliche CR als ^ M oder am Ende jeder Zeile oder als zweiter Zeilenumbruch angezeigt werden.

Richard Ev
quelle
5

Dies bedeutet, dass beispielsweise einige Ihrer Textzeilen mit einem <Carriage Return><Linefeed>(Windows-Standard) und einige nur mit einem <Linefeed>(Unix-Standard) enden .

Wenn Sie auf "Ja" klicken, wird das Zeilenende in Ihrer Quelldatei in das gleiche Format konvertiert.

Dies hat für den Compiler keinen Unterschied (da das Zeilenende nur als Leerzeichen gilt), kann jedoch für andere Tools (z. B. den Unterschied in Ihrem Versionskontrollsystem) einen Unterschied bedeuten.

ChrisW
quelle
4

Es ist nicht nur Visual Studio ... Es wären alle Tools, die Dateien, Compiler, Linker usw. lesen, die damit umgehen müssen.

Im Allgemeinen (für die Softwareentwicklung) akzeptieren wir das Problem des Multiplattform-Zeilenendes, lassen jedoch die Versionskontrollsoftware damit umgehen.

Peter Y.
quelle
1
Genau. Lassen Sie es am besten von Ihrem SCM-System tun. Wenn Sie svn verwenden, siehe auch stackoverflow.com/questions/15687/…
kgriffs
Stimme voll und ganz zu. Was passiert, wenn ich an einem Projekt arbeite und unter Windows arbeite und mein Teamkollege einen Mac verwendet? Wir werden CR ständig auf CRLF und wieder zurück ändern. Am besten lassen Sie das SCM das weg abstrahieren. Bei den meisten Antworten wird lediglich davon ausgegangen, dass die Benutzer alleine arbeiten oder dass jeder, der am Code arbeitet, Windows verwendet.
Bytedev
3

Wenn Sie etwas aus dem Web kopieren und einfügen, erhalten Sie möglicherweise inkonsistente Zeilenenden.
Um dies zu beheben, können Sie die Visual Studio-Erweiterung "Line Endings Unifier" verwenden, mit der das Zeilenende beim Speichern der Datei automatisch konsistent gemacht werden kann.

Geben Sie hier die Bildbeschreibung ein

Jay Shah
quelle
2

Für Visual Studio 2008 gibt es ein Add-In, das das Zeilenendeformat beim Speichern einer Datei konvertiert. Sie können es hier herunterladen: http://grebulon.com/software/stripem.php


quelle
Dies kann hilfreich sein, wenn Sie den Fehler "Inkonsistente Zeilenenden" von svn erhalten.
Kgriffs