Newline di Eclipse e Windows


182

Ho dovuto spostare il mio spazio di lavoro Eclipse da Linux a Windows quando il desktop si è bloccato. Una settimana dopo lo copio di nuovo su Linux, codifico felicemente, mi impegno per CVS. E purtroppo, le newline di Windows hanno inquinato molti file, quindi CVS diff scarica l'intero file, anche quando ho cambiato una o due righe!

Potrei preparare uno script, ma mi chiedo se rovinerà i miei file di progetto Eclipse.


1
Per convertire le terminazioni di riga per pochi / tutti i file in un progetto con pochi clic: stackoverflow.com/a/7019737/1364747
Teddy

Risposte:


358

Come menzionato qui e qui :

Imposta la codifica dei file UTF-8e le terminazioni di riga per i nuovi file su Unix, in modo che i file di testo vengano salvati in un formato non specifico per il sistema operativo Windows e più facilmente condivisi su desktop per sviluppatori eterogenei:

  • Passare alle preferenze Spazio di lavoro (Generale: Spazio di lavoro)
  • Modificare la codifica del file di testo in UTF-8
  • Modificare il delimitatore di riga del nuovo file di testo su Altro e selezionare Unix dall'elenco

testo alternativo

  • Nota: per convertire le terminazioni di riga di un file esistente, aprire il file in Eclipse e scegliere File : Convert Line Delimiters to : Unix

Suggerimento : è possibile convertire facilmente i file esistenti selezionando quindi in Esplora pacchetti, quindi andando alla voce di menuFile : Convert Line Delimiters to : Unix


2
Questo è esattamente quello che stavo cercando! L'avevo già cambiato per nuovi file, ma l'opzione per la conversione mi mancava gli occhi. Grazie VonC!
Vasu,

@Vasu: prego :). La vista Struttura e Esplora pacchetti contengono alcune funzioni per elementi a selezione multipla che sono spesso trascurati.
VonC,

Ottimo commento. Cercare questo da solo attraverso l'orribile dialogo delle preferenze labirintico di Eclipse mi stava facendo impazzire.
Cerin,

39
Se si sceglie un intero progetto in Esplora pacchetti, è possibile utilizzare il File : Convert Line Delimiters to : Unixcomando per "correggere" tutti i file nel progetto contemporaneamente.
Tal Weiss,

11

Ho avuto gli stessi file di eclissi inquinati anche con un cambio di riga. Soluzione: impostazioni di Eclipse git -> Aggiungi voce: Chiave: core.autocrlf Valori: true

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Sebbene questa sia una soluzione OK per la maggior parte dei casi, può mordere, ad esempio quando si calcolano i checksum sui file di origine. Questi differiranno quindi da piattaforma a piattaforma.
zb226,

8

C'è una comoda utility bash dos2unix- che è un convertitore di formato di file di testo da DOS / MAC a UNIX, che se non è già installato sulla tua distribuzione, dovrebbe essere facilmente installabile tramite un gestore di pacchetti. Pagina man di dos2unix


Avevo intenzione di scrivere una sceneggiatura per farlo in modo ricorsivo sul mio spazio di lavoro eclissi. L'unica preoccupazione era corrompere qualsiasi file di progetto interno di eclissi. Grazie per il tuo suggerimento!
Vasu,

7

Oltre alle soluzioni Eclipse e allo strumento menzionato in un'altra risposta , considera il flip . Può 'alternare' tra le interruzioni di riga normali e di Windows e fa cose piacevoli come preservare il timestamp del file e altre statistiche.

Puoi usarlo in questo modo per risolvere il tuo problema:

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

(Ho inserito una clausola per ignorare la tua directory .git, nel caso in cui usi git, ma dato che flip ignora i file binari per impostazione predefinita, potresti non averne bisogno.)


Solo una nota ... questo comando è per utenti Linux, non utenti Windows. Windows findnon funziona in questo modo.
Brad,

@Brad è corretto. Tuttavia, esiste una porta di Flip di Cygwin: github.com/jaalto/cygwin-package--flip
Michael Scheper

3

Puoi provarlo. Il problema è che Windows inserisce un ritorno a capo e un feed di riga quando viene assegnata una nuova riga. I sistemi Unix inseriscono semplicemente un avanzamento riga. Quindi il carattere di ritorno a capo extra potrebbe essere il motivo per cui la tua eclissi si confonde con le nuove linee.

Prendi uno o due file dal tuo progetto e convertili. È possibile utilizzare Notepad ++ per farlo. Basta aprire il file, andare su Formato-> Converti in Unix (quando si utilizza Windows).

In Linux basta provare questo da una riga di comando:

sed 's/$'"/`echo \\\r`/" yourfile.java > output.java

Ho circa 10k file! Quindi ho dovuto automatizzarlo in qualche modo. Grazie per il consiglio!
Vasu,

Qualche errore di battitura sulla tua CLI: sed -i 's/$`echo \\\r`//' yourfile.javae per automatizzarlafind . -name "*.java" -exec sed -i 's/$`echo \\\r`//' {} \;
pdem

3

Per rimuovere ricorsivamente i ritorni a capo ( \r) dai file CVS / * in tutte le directory figlio, eseguire quanto segue in una shell unix:

find ./ -wholename "\*CVS/[RE]\*" -exec dos2unix -q -o {} \;
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.