Що означає Visual Studio, нормалізуючи непослідовні закінчення рядків?


238

Visual Studio час від часу каже мені:

Закінчення рядків у наступних файлах несумісні. Ви хочете нормалізувати закінчення рядків?

Потім він дає мені спадання з різними стандартами або чимось таким, як Windows, Mac, Unix та декілька Unicode.

Що це означає і що буде, якщо натиснути Yes?


Visual Studio показує мені це саме повідомлення, але "файл", на який він посилається, насправді є папкою! Що це означає?!
Полковник Паніка

Я зробив невелику утиліту, щоб зробити це для всього каталогу або рекурсивно через набір каталогів для всіх файлів певного розширення (наприклад * .c або * .h), хоча я використовую Delphi, утиліта працює для будь-якого вихідного коду Windows файли. Вихідний код включений плюс двійковий (exe). Він повідомить, у яких рядках є додаткові канали ліній (тобто відсутні дані про перевезення) або додаткові зворотні перевезення (тобто відсутні лінійки каналів). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P

1
Може бути викликано git. Дивіться також: stackoverflow.com/questions/170961/…
Джесс

2
Вони повинні мати опцію у спадному меню, де написано "віддавати перевагу найпоширенішому типу закінчення рядка з решти файлу / проекту".
MetaGuru

Відповіді:


213

Зазвичай це означає, що у вас є лінії, що закінчуються чимось іншим, ніж пара повернення / передачі каретки. Це часто трапляється, коли ви копіюєте та вставляєте з веб-сторінки в редактор коду.

Нормалізація закінчень рядків - це лише переконання, що всі символи, що закінчуються рядком, є послідовними. Це не дозволяє одному рядку закінчуватися, \r\nа іншому закінчувати \rабо \n; Перша - це кінцева пара рядків Windows, а інші зазвичай використовуються для файлів Mac або Linux.

Оскільки ви розвиваєтеся у Visual Studio, ви, очевидно, захочете вибрати "Windows" зі спадного меню. :-)


1
як закінчується лінія без повернення вагона ...?
MetaGuru

23
Тож чому фліп візуальній студії дбає про те, як закінчуються рядки, він, мабуть, розпізнає всі різні типи, він повинен просто радіти і заткнутися.
MetaGuru

53
Ага, але що робити, якщо ви просто використовуєте VS, щоб виправити щось, що не для Windows? Швидке виправлення утиліти Linux або чогось прямого C / C ++, і ви не хочете додавати CRLF? Зачекайте - тепер ви хочете, щоб МС читав ваш розум і знав, що використовувати? <g> Команда VS помиляється в будь-якому випадку, чи не так? Sheesh!
Кен Уайт

6
О, оснастіть Кен, ви маєте рацію, якщо мені трапиться редагувати деякі файли, які я планую компілювати в Linux, і я знаю, що компілятор задушиться і помре, якщо в ньому немає точно закінчень рядків, які йому потрібні, тоді я буду мати був радий VS, дозвольте мені вибрати ... ДЯКУЮ!
MetaGuru

19
Проблема не в тому, що VS не справляється з закінченнями рядків Unix - це може. Попередження говорить про те, що закінчення рядків несумісні - тобто деякі рядки у файлі є CRLF, а деякі - LF. VS впорається з цим, але інші програми у вашій ланцюзі інструментів можуть не робити, отже, це попереджає вас. Якщо вас це не хвилює, вимкніть попередження: Опції -> Навколишнє середовище -> Документи -> "Перевірити відповідність закінчень рядків на завантаження". Це попередження може бути дуже корисним, якщо ви працюєте над продуктами на багатьох платформах.
the_mandrill

75

Деякі рядки закінчуються на \n.

Деякі інші рядки закінчуються на \r\n.

Visual Studio пропонує вам закінчити всі рядки однаковими.


40

Якщо ви використовуєте Visual Studio 2012:

Перейдіть до меню ФайлДодаткові параметри збереження → виберіть тип закінчень рядка як Windows (CR LF) .


1
Цей параметр не відображається в меню "Файл" для моєї версії Visual Studio 2010 Ultimate 10.0.40219.1 SP1Rel.
DOK

1
@DOK, у моєму меню Файл у Visual Studio 2010 Premium версія це робить !!
Пітер

4
Якщо ви не бачите опції, ви можете налаштувати меню вашого файлу, перейшовши в меню Інструменти-> Налаштувати, перейти на вкладку команд та додати команду.
Роб

Чи є загальне налаштування, яке впливає на всі файли разом? Боляче робити це для всіх джерел під рішенням.
Клаус

12

Щоб увімкнути / вимкнути цю опцію, виконайте наведені нижче дії на панелі меню :

ІнструментиОпціїНавколишнє середовищеДокументиПеревірте відповідність закінчень рядків під час завантаження


7

Файл, який ви редагуєте, відредаговано за допомогою іншого редактора, який не використовує однакові закінчення рядків, в результаті чого вийде файл із змішаними закінченнями рядків.

Символи ASCII, використовувані для закінчень рядків, є:

CR, повернення каретки
LF, подача лінії

Windows = CRLF
Mac OS 9 або новішої версії = CR
Unix = LF


6

Стаття в новому рядку Вікіпедії може допомогти вам. Ось уривок:

У різних конвенціях нового рядка часто невірно відображаються текстові файли, передані між системами різних типів. Наприклад, файли, що походять з систем Unix або Apple Macintosh, можуть відображатись як один довгий рядок у деяких програмах, що працюють на Microsoft Windows. І навпаки, при перегляді файлу, що походить з комп'ютера Windows в системі Unix, зайвий CR може відображатися як ^ M або в кінці кожного рядка або як перерив другого рядка.


5

Це означає, що, наприклад, деякі ваші рядки тексту з <Carriage Return><Linefeed>(стандарт Windows), а деякі закінчуються лише <Linefeed>символом (стандарт Unix).

Якщо ви натиснете "так", ці кінці рядків у вихідному файлі будуть перетворені у такий самий формат.

Це не матиме ніякої різниці для компілятора (оскільки кінці рядків вважаються простою пробілом), але це може змінити інші інструменти (наприклад, 'diff' у вашій системі управління версіями).


4

Це не лише Visual Studio ... Це були б будь-які інструменти, які читають файли, компілятори, посилання тощо.

Загалом (для розробки програмного забезпечення) ми приймаємо випуск рядка мультиплатформної лінії, що закінчується, але нехай це займається програмне забезпечення для управління версіями.


1
Я згоден. Найкраще дозвольте це зробити вашій системі SCM. Якщо ви використовуєте SVN, дивіться також stackoverflow.com/questions/15687 / ...
kgriffs

Повністю згоден. Що станеться, якщо я працюю над проектом і працюю в Windows, а мій товариш по команді використовує Mac. Ми будемо постійно змінювати CR на CRLF і знову. Найкраще, щоб SCM реферував це далеко. Більшість відповідей просто припускають, що люди працюють самостійно або всі, хто працює над кодом, використовують Windows.
bytedev

3

Коли ви копіюєте щось, що вставляється з Інтернету, ви можете отримати непослідовні закінчення рядків.
Для того, щоб виправити це, ви можете скористатися розширенням Visual Studio "Уніфікатор рядків рядків", яке може зробити контур рядків автоматично послідовним, зберігаючи файл.

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


2

Існує надбудова для Visual Studio 2008, яка перетворює формат кінця рядка, коли файл зберігається. Завантажити його можна тут: http://grebulon.com/software/stripem.php


Це може допомогти, коли ви отримаєте помилку "непослідовні закінчення рядків" від svn.
кгріфи
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.