Затемнення та нові рядки Windows


182

Мені довелося перемістити робочу область Eclipse з Linux у Windows, коли мій робочий стіл вийшов з ладу. Через тиждень я копіюю його назад у Linux, з радістю кодую, беруть участь у CVS. На жаль, вікна Newlines забруднили багато файлів, тому CVS diff скидає весь файл, навіть коли я змінив рядок чи два!

Я міг би приготувати сценарій, але мені цікаво, чи це зіпсує мої файли проекту Eclipse.


1
Для перетворення закінчень рядків для кількох / усіх файлів у проекті лише кількома клацаннями: stackoverflow.com/a/7019737/1364747
Тедді

Відповіді:


358

Як згадується тут і тут :

Встановіть кодування файлів UTF-8і закінчення рядків для нових файлів в Unix, щоб текстові файли зберігалися у форматі, не характерному для операційної системи Windows, а найпростіше поділитися на різнорідних робочих столах розробника:

  • Перейдіть до налаштувань робочої області (загальне: робоча область)
  • Змініть кодування текстового файлу на UTF-8
  • Змініть розділовий рядок Новий текстовий файл на Інше та виберіть Unix зі списку вибору

alt текст

  • Примітка: щоб конвертувати закінчення рядків існуючого файлу, відкрийте файл у Eclipse та виберіть File : Convert Line Delimiters to : Unix

Порада : Ви можете легко конвертувати існуючий файл, вибравши потім в Провідник пакунків, а потім перейти до пункту менюFile : Convert Line Delimiters to : Unix


2
Це саме те, що я шукав! Я вже змінив це на нові файли, але варіант конвертувати - пропустив очі. Дякую VonC!
Васу

@Vasu: ласкаво просимо :). Перегляд "Контур" та "Провідник пакунків" містять деякі функції для вибраних елементів, які часто не помічаються.
VonC

Відмінний запис. Я сам шукав це через жахливо лабіринтський діалог уподобань Екліпса, що зводив мене з розуму.
Серін

39
Якщо ви вибрали весь проект у програмі провідника пакунків, ви можете скористатися File : Convert Line Delimiters to : Unixкомандою, щоб "виправити" всі файли проекту відразу.
Тал Вайс

11

У мене були однакові, забруднені затьмаренням файли навіть при одній зміні рядка. Рішення: налаштування Eclipse git -> Додати запис: ключ: core.autocrlf значення: true

введіть тут опис зображення

введіть тут опис зображення


Хоча це рішення OK у більшості випадків, воно може вас вкусити - наприклад, під час обчислення контрольних сум над вихідними файлами. Потім вони будуть відрізнятися від платформи до платформи.
zb226

8

Існує зручна утиліта bash - dos2unix- це перетворювач формату текстових файлів DOS / MAC в UNIX, який, якщо він ще не встановлений у вашому дистрибутиві, повинен бути легко встановлений через менеджер пакетів. сторінка чоловіка dos2unix


Я планував написати сценарій, щоб рекурсивно це зробити на робочому просторі затемнення. Тільки хвилювався, що пошкоджує будь-які внутрішні файли проекту затемнення. Дякуємо за вашу пропозицію!
Васу

7

Окрім рішень Eclipse та інструменту, згаданого в іншій відповіді , розглянемо flip . Він може "переходити" будь-яким способом між звичайними і Windows-лініями, і робить такі приємні речі, як збереження часової позначки файлу та інших статистичних даних.

Ви можете використовувати його так, щоб вирішити свою проблему:

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

(Я вкладаю застереження про ігнорування вашого каталогу .git, якщо ви використовуєте git, але оскільки фліп ігнорує бінарні файли за замовчуванням, це вам може не знадобиться.)


Лише зауваження ... ця команда призначена для користувачів Linux, а не для користувачів Windows. Windows findне працює таким чином.
Бред

@Brad правильний. Однак існує порт Cygwin flip: github.com/jaalto/cygwin-package--flip
Майкл

3

Ви можете спробувати. Проблема полягає в тому, що Windows вставляє повернення каретки, а також канал рядка при новому рядку. Unix-системи просто вставляють рядок каналу. Тож додатковий характер повернення каретки може стати причиною того, що ваше затемнення псується з новими рядками.

Візьміть один або два файли з вашого проекту та конвертуйте їх. Ви можете використовувати Notepad ++ для цього. Просто відкрийте файл, перейдіть у формат-> Перетворити в Unix (коли ви використовуєте Windows).

В Linux просто спробуйте це в командному рядку:

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

У мене є близько 10k файлів! Тож довелося якось автоматизувати це. Дякую за пораду!
Васу

Якась помилка sed -i 's/$`echo \\\r`//' yourfile.javafind . -name "*.java" -exec sed -i 's/$`echo \\\r`//' {} \;
друку

3

Для рекурсивного видалення return ( \r) файлів перевезення ( ) з файлів CVS / * у всіх дочірніх каталогах виконайте наступне в оболонці unix:

find ./ -wholename "\*CVS/[RE]\*" -exec dos2unix -q -o {} \;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.