Eclipse- und Windows-Zeilenumbrüche

182

Ich musste meinen Eclipse-Arbeitsbereich von Linux auf Windows verschieben, als mein Desktop abstürzte. Eine Woche später kopiere ich es zurück nach Linux, codiere glücklich und verpflichte mich zu CVS. Und leider haben Windows-Zeilenumbrüche viele Dateien verschmutzt, sodass CVS diff die gesamte Datei ausgibt, selbst wenn ich ein oder zwei Zeilen geändert habe!

Ich könnte ein Skript erstellen, aber ich frage mich, ob es meine Eclipse-Projektdateien durcheinander bringen wird.

Vasu
quelle
1
Zum Konvertieren von Zeilenenden für wenige / alle Dateien in einem Projekt mit nur wenigen Klicks: stackoverflow.com/a/7019737/1364747
Teddy

Antworten:

358

Wie hier und hier erwähnt :

Stellen Sie die Dateicodierung UTF-8und die Zeilenenden für neue Dateien auf Unix ein, damit Textdateien in einem Format gespeichert werden, das nicht für das Windows-Betriebssystem spezifisch ist und am einfachsten von heterogenen Entwickler-Desktops gemeinsam genutzt werden kann:

  • Navigieren Sie zu den Einstellungen für den Arbeitsbereich (Allgemein: Arbeitsbereich).
  • Ändern Sie die Textdatei-Codierung in UTF-8
  • Ändern Sie den Zeilenbegrenzer für neue Textdateien in Andere und wählen Sie Unix aus der Auswahlliste

Alt-Text

  • Hinweis: Um die Zeilenenden einer vorhandenen Datei zu konvertieren, öffnen Sie die Datei in Eclipse und wählen Sie File : Convert Line Delimiters to : Unix

Tipp : Sie können vorhandene Dateien einfach konvertieren, indem Sie sie im Paket-Explorer auswählen und dann zum Menüeintrag wechselnFile : Convert Line Delimiters to : Unix

VonC
quelle
2
Genau das habe ich gesucht! Ich hatte es bereits für neue Dateien geändert, aber die Option zum Konvertieren hat meine Augen verfehlt. Danke VonC!
Vasu
@ Vasu: Gern geschehen :). Die Gliederungsansicht und der Paket-Explorer enthalten einige Funktionen für mehrfach ausgewählte Elemente, die häufig übersehen werden.
VonC
Großartige Zusammenfassung. Die Suche selbst durch Eclipse's schrecklich labyrinthische Präferenzdialog machte mich wahnsinnig.
Cerin
39
Wenn Sie im Paket-Explorer ein gesamtes Projekt auswählen, können Sie mit dem File : Convert Line Delimiters to : UnixBefehl alle Dateien im Projekt gleichzeitig "reparieren".
Tal Weiss
11

Ich hatte die gleichen, Eclipse verschmutzten Dateien auch mit einem Zeilenwechsel. Lösung: Eclipse-Git-Einstellungen -> Eintrag hinzufügen: Schlüssel: core.autocrlf Werte: true

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

user988282
quelle
Obwohl dies in den meisten Fällen eine OK-Lösung ist, kann es Sie beißen - zum Beispiel, wenn Sie Prüfsummen über Quelldateien berechnen. Diese unterscheiden sich dann von Plattform zu Plattform.
zb226
8

Es gibt ein praktisches Bash-Dienstprogramm - dos2unix- einen DOS / MAC-zu-UNIX-Textdateiformatkonverter, der, falls er nicht bereits in Ihrer Distribution installiert ist, problemlos über einen Paketmanager installiert werden kann. dos2unix manpage

Ben Hayden
quelle
Ich hatte vor, ein Skript zu schreiben, um dies rekursiv über meinen Eclipse-Arbeitsbereich zu tun. Die einzige Sorge war, dass interne Eclipse-Projektdateien beschädigt wurden. Danke für Ihren Vorschlag!
Vasu
7

Berücksichtigen Sie zusätzlich zu den Eclipse-Lösungen und dem in einer anderen Antwort erwähnten Tool den Flip . Es kann in beide Richtungen zwischen normalen und Windows-Zeilenumbrüchen wechseln und macht nette Dinge wie das Beibehalten des Zeitstempels der Datei und anderer Statistiken.

Sie können es so verwenden, um Ihr Problem zu lösen:

find . -type f -not -path './.git/*' -exec flip -u {} \;

(Ich habe eine Klausel eingefügt, um Ihr .git-Verzeichnis zu ignorieren, falls Sie git verwenden. Da flip jedoch standardmäßig Binärdateien ignoriert, benötigen Sie diese möglicherweise nicht.)

Michael Scheper
quelle
Nur eine Anmerkung ... dieser Befehl ist für Linux-Benutzer, nicht für Windows-Benutzer. Windows findfunktioniert so nicht.
Brad
@Brad ist richtig. Es gibt jedoch einen Cygwin-Port von Flip: github.com/jaalto/cygwin-package--flip
Michael Scheper
3

Sie könnten es versuchen. Das Problem ist, dass Windows einen Wagenrücklauf sowie einen Zeilenvorschub einfügt, wenn eine neue Zeile angegeben wird. Unix-Systeme fügen einfach einen Zeilenvorschub ein. Das zusätzliche Wagenrücklaufzeichen könnte der Grund sein, warum Ihre Sonnenfinsternis die Zeilenumbrüche durcheinander bringt.

Holen Sie sich ein oder zwei Dateien aus Ihrem Projekt und konvertieren Sie sie. Sie können dazu Notepad ++ verwenden. Öffnen Sie einfach die Datei und gehen Sie zu Format-> In Unix konvertieren (wenn Sie Windows verwenden).

Versuchen Sie dies unter Linux einfach über eine Befehlszeile:

sed 's/$'"/`echo \\\r`/" yourfile.java > output.java
Ham Vocke
quelle
Ich habe ungefähr 10k Dateien! Also musste es irgendwie automatisieren. Danke für den Hinweis!
Vasu
Einige Tippfehler auf Ihrer CLI: sed -i 's/$`echo \\\r`//' yourfile.javaund um es zu automatisierenfind . -name "*.java" -exec sed -i 's/$`echo \\\r`//' {} \;
pdem
3

\rFühren Sie Folgendes in einer Unix-Shell aus, um die Zeilenumbrüche ( ) rekursiv aus den CVS / * -Dateien in allen untergeordneten Verzeichnissen zu entfernen :

find ./ -wholename "\*CVS/[RE]\*" -exec dos2unix -q -o {} \;
Gabe
quelle