Co oznacza program Visual Studio przez normalizację niespójnych zakończeń linii?


238

Visual Studio od czasu do czasu mówi mi:

Zakończenia linii w poniższych plikach nie są spójne. Czy chcesz znormalizować zakończenia linii?

Daje mi to listę różnych standardów lub czegoś takiego, jak Windows, Mac, Unix i kilka Unicode.

Co to oznacza i co się stanie, jeśli kliknę Yes?


Visual Studio pokazuje mi ten sam komunikat, ale „plik”, do którego się odnosi, jest w rzeczywistości folderem! Co to znaczy?!
Pułkownik Panic

Zrobiłem małe narzędzie, aby zrobić to do całego katalogu lub rekurencyjnie poprzez zestaw katalogów dla wszystkich plików o danym rozszerzeniu (jak * .c lub * .h), chociaż używam Delphi, narzędzie działa na dowolny kod źródłowy systemu Windows pliki. Zawiera kod źródłowy plus plik binarny (exe). Raportuje, które linie mają dodatkowe przesunięcia linii (tj. Brak powrotów karetki) lub dodatkowe zwroty karetki (tj. Brak przesunięć linii). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P

1
Może być spowodowany przez git. Zobacz także: stackoverflow.com/questions/170961/…
Jess

2
Powinny mieć opcję z menu rozwijanego, która mówi „faworyzuj najbardziej popularny typ zakończenia linii od reszty pliku / projektu”.
MetaGuru

Odpowiedzi:


213

Zazwyczaj oznacza to, że masz linie kończące się czymś innym niż para powrotu karetki / linia przesuwania wiersza. Często dzieje się tak, gdy kopiujesz i wklejasz stronę internetową do edytora kodu.

Normalizacja zakończeń linii to po prostu upewnienie się, że wszystkie znaki zakończenia linii są spójne. Zapobiega kończeniu jednej linii, \r\na drugiej kończąc na \rlub \n; pierwsza to końcowa para systemu Windows, podczas gdy inne są zwykle używane w plikach Mac lub Linux.

Ponieważ rozwijasz się w Visual Studio, oczywiście będziesz chciał wybrać „Windows” z rozwijanego menu. :-)


1
jak kończy się linia bez powrotu karetki ...?
MetaGuru,

23
Dlaczego więc klapie studio wizualne dba o to, jak kończą się linie, najwyraźniej rozpoznaje wszystkie różne typy, powinno być po prostu szczęśliwe i zamknięte.
MetaGuru,

53
Ach, ale co, jeśli używasz VS do naprawy czegoś, co nie jest dla systemu Windows? Szybka poprawka na narzędziu Linuksa lub coś prostego w C / C ++, a nie chcesz dodawać CRLF? Poczekaj - teraz chcesz, aby stwardnienie rozsiane czytało w twoich myślach i wiedziało, którego użyć? <g> Zespół VS i tak się myli, prawda? Do licha!
Ken White

6
Och, snap Ken, masz rację, jeśli zdarza mi się edytować niektóre pliki, które planuję skompilować w Linuksie i wiem, że kompilator dusi się i umiera, jeśli nie będzie miał dokładnie końca linii, którego potrzebuje, wtedy będę miał cieszę się VS pozwól mi wybrać ... DZIĘKUJĘ!
MetaGuru,

19
Problem nie polega na tym, że VS nie radzi sobie z zakończeniami linii uniksowej - może. Ostrzeżenie mówi ci, że zakończenia linii są niespójne - tzn. Niektóre linie w pliku to CRLF, a niektóre to LF. VS sobie z tym poradzi, ale inne aplikacje w twoim łańcuchu narzędzi mogą tego nie robić, dlatego cię ostrzega. Jeśli nie przejmujesz się tym, wyłącz ostrzeżenie: Opcje -> Środowisko -> Dokumenty -> „Sprawdź spójne zakończenia linii przy ładowaniu”. To ostrzeżenie może być bardzo przydatne, jeśli pracujesz nad produktami na wielu platformach.
the_mandrill

75

Niektóre linie kończą się na \n.

Niektóre inne linie kończą się na \r\n.

Visual Studio sugeruje, aby wszystkie linie kończyły się tak samo.


40

Jeśli używasz programu Visual Studio 2012:

Przejdź do menu PlikZaawansowane opcje zapisu → wybierz Typ zakończenia linii jako Windows (CR LF) .


1
Ta opcja nie pojawia się w menu Plik w moim programie Visual Studio 2010 Ultimate wersja 10.0.40219.1 SP1Rel.
DOK

1
@DOK, w moim menu Plik w wersji Visual Studio 2010 Premium robi to !!
Peter

4
Jeśli nie widzisz tej opcji, możesz dostosować menu plików, przechodząc do Narzędzia-> Dostosuj, przechodząc do karty poleceń i dodając polecenie.
Rob

Czy istnieje ogólne ustawienie, które wpływa na wszystkie pliki razem? Trudno to zrobić dla wszystkich źródeł w ramach jednego rozwiązania.
Klaus

12

Aby włączyć / wyłączyć opcję, wykonaj następujące czynności z paska menu :

NarzędziaOpcjeŚrodowiskoDokumentySprawdź spójne zakończenia linii przy obciążeniu


7

Plik, który edytujesz, był edytowany w innym edytorze, który nie używa tych samych zakończeń linii, w wyniku czego powstaje plik z mieszanymi zakończeniami linii.

Znaki ASCII używane jako zakończenia linii to:

CR, Carriage Return
LF, Line Feed

Windows = CRLF
Mac OS 9 lub wcześniejszy = CR
Unix = LF


6

Artykuł w nowej linii Wikipedii może ci pomóc. Oto fragment:

Różne konwencje nowego wiersza często powodują nieprawidłowe wyświetlanie plików tekstowych przesłanych między systemami różnych typów. Na przykład pliki pochodzące z systemów Unix lub Apple Macintosh mogą pojawiać się jako pojedyncza długa linia w niektórych programach działających w systemie Microsoft Windows. I odwrotnie, podczas przeglądania pliku pochodzącego z komputera z systemem Windows w systemie Unix dodatkowy CR może być wyświetlany jako ^ M lub na końcu każdej linii lub jako podział drugiej linii.


5

Oznacza to, że na przykład niektóre linie tekstu mają <Carriage Return><Linefeed>(standard Windows), a niektóre kończą się tylko <Linefeed>(standard Unix).

Jeśli klikniesz „tak”, linie końca pliku źródłowego zostaną przekonwertowane do tego samego formatu.

Nie spowoduje to żadnej różnicy w kompilatorze (ponieważ końce wierszy liczą się jako zwykłe białe znaki), ale może mieć znaczenie dla innych narzędzi (np. „Diff” w systemie kontroli wersji).


4

To nie tylko Visual Studio ... To byłyby wszelkie narzędzia odczytujące pliki, kompilatory, linkery itp., Które musiałyby sobie z tym poradzić.

Zasadniczo (w przypadku opracowywania oprogramowania) akceptujemy wieloplatformowe zakończenie linii, ale oprogramowanie kontroli wersji musi sobie z tym poradzić.


1
Zgadzam się. Najlepiej, aby twój system SCM to zrobił. Jeśli używasz svn, zobacz także stackoverflow.com/questions/15687/…
kgriffs,

Kompletnie się zgadzam. Co się stanie, jeśli pracuję nad projektem i korzystam z systemu Windows, a mój kolega z zespołu używa komputera Mac. Będziemy ciągle zmieniać CR na CRLF iz powrotem. Najlepiej, aby SCM to streścił. Większość odpowiedzi zakłada, że ​​ludzie pracują sami lub wszyscy pracujący nad kodem korzystają z systemu Windows.
bytedev

3

Podczas kopiowania wklej coś z Internetu, możesz uzyskać niespójne zakończenia linii.
Aby to naprawić, możesz użyć rozszerzenia Visual Studio „Line Endings Unifier”, dzięki któremu zakończenie linii będzie automatycznie spójne podczas zapisywania pliku.

wprowadź opis zdjęcia tutaj


2

Istnieje dodatek do programu Visual Studio 2008, który konwertuje format końca linii podczas zapisywania pliku. Możesz go pobrać tutaj: http://grebulon.com/software/stripem.php


Może to pomóc, gdy pojawi się błąd „niespójne zakończenia linii” z svn.
kgriffs
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.