Visual Studio có nghĩa là gì khi bình thường hóa kết thúc dòng không nhất quán?


238

Visual Studio thỉnh thoảng nói với tôi:

Các kết thúc dòng trong các tập tin sau không nhất quán. Bạn có muốn bình thường hóa kết thúc dòng?

Sau đó, nó đưa tôi xuống với các tiêu chuẩn khác nhau hoặc một cái gì đó, chẳng hạn như Windows, Mac, Unix và một vài Unicode.

Điều này có nghĩa là gì và điều gì sẽ xảy ra nếu tôi nhấp vào Yes?


Visual Studio cho tôi thấy thông điệp tương tự, nhưng "tập tin" mà nó đề cập thực chất là một thư mục! Điều đó nghĩa là gì?!
Đại tá hoảng loạn

Tôi đã tạo một tiện ích nhỏ để thực hiện việc này cho toàn bộ thư mục hoặc đệ quy thông qua một tập hợp các thư mục cho tất cả các tệp của một tiện ích mở rộng cụ thể (như * .c hoặc * .h), mặc dù tôi sử dụng Delphi, tiện ích này hoạt động cho mọi mã nguồn Windows các tập tin. Mã nguồn bao gồm cộng nhị phân (exe). Nó sẽ báo cáo những dòng nào có thêm nguồn cấp dữ liệu (tức là trả lại vận chuyển bị thiếu) hoặc trả lại vận chuyển thêm (tức là thiếu nguồn cấp). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/ Kẻ
Warren P

1
Có thể được gây ra bởi git. Xem thêm: stackoverflow.com/questions/170961/ Mạnh
Jess

2
Họ nên có một tùy chọn trong trình đơn thả xuống có nội dung 'ưu tiên loại kết thúc dòng phổ biến nhất từ ​​phần còn lại của tệp / dự án'.
MetaGuru

Câu trả lời:


213

Điều thường có nghĩa là bạn có các dòng kết thúc bằng thứ gì đó không phải là cặp nguồn cấp dữ liệu / dòng trở lại. Nó thường xảy ra khi bạn sao chép và dán từ một trang web vào trình chỉnh sửa mã.

Bình thường hóa các kết thúc dòng chỉ là đảm bảo rằng tất cả các ký tự kết thúc dòng là nhất quán. Nó ngăn một dòng kết thúc \r\nvà một dòng khác kết thúc bằng \rhoặc \n; đầu tiên là cặp kết thúc dòng Windows, trong khi các cặp khác thường được sử dụng cho các tệp Mac hoặc Linux.

Vì bạn đang phát triển trong Visual Studio, rõ ràng bạn sẽ muốn chọn "Windows" từ trình đơn thả xuống. :-)


1
làm thế nào để dòng kết thúc mà không có một chiếc xe ngựa trở lại ...?
MetaGuru

23
Vì vậy, tại sao các phòng thu trực quan quan tâm làm thế nào các dòng kết thúc, nó dường như nhận ra tất cả các loại khác nhau, nó nên được hạnh phúc và im lặng.
MetaGuru

53
À, nhưng nếu bạn chỉ sử dụng VS để sửa cái gì đó không dành cho Windows thì sao? Khắc phục nhanh trên tiện ích Linux hoặc thứ gì đó là C / C ++ thẳng và bạn không muốn thêm CRLF? Đợi đã - bây giờ bạn muốn MS đọc suy nghĩ của bạn và biết nên sử dụng cái nào? <g> Đội VS cũng sai, phải không? Sheesh!
Ken White

6
Ôi chao, Ken nói đúng, nếu tôi tình cờ chỉnh sửa một số tệp mà tôi dự định biên dịch trong Linux và tôi biết trình biên dịch sẽ bị sặc và chết nếu nó không có kết thúc chính xác mà nó cần thì tôi sẽ có rất vui vì VS hãy để tôi chọn ... CẢM ƠN BẠN!
MetaGuru

19
Vấn đề không phải là VS không thể đối phó với các kết thúc dòng Unix - nó có thể. Cảnh báo cho bạn biết rằng các kết thúc dòng không nhất quán - tức là một số dòng trong tệp là CRLF và một số là LF. VS sẽ đối phó với điều đó nhưng các ứng dụng khác trong chuỗi công cụ của bạn có thể không, do đó nó cảnh báo bạn. Nếu bạn không quan tâm đến điều này thì hãy tắt cảnh báo: Tùy chọn -> Môi trường -> Tài liệu -> 'Kiểm tra các kết thúc dòng nhất quán khi tải'. Cảnh báo này có thể rất hữu ích nếu bạn đang làm việc trên các sản phẩm trên nhiều nền tảng.
the_mandrill

75

Một số dòng kết thúc bằng \n.

Một số dòng khác kết thúc bằng \r\n.

Visual Studio gợi ý bạn làm cho tất cả các dòng kết thúc giống nhau.


40

Nếu bạn đang sử dụng Visual Studio 2012:

Chuyển đến menu TệpTùy chọn lưu nâng cao → chọn Loại kết thúc dòngWindows (CR LF) .


1
Tùy chọn đó không xuất hiện trên menu Tệp của tôi cho Visual Studio 2010 Ultimate Phiên bản 10.0.40219.1 SP1Rel.
DOK

1
@DOK, trên menu Tệp của tôi tại Visual Studio 2010 Premium phiên bản !!
Peter

4
Nếu bạn không thể thấy tùy chọn, bạn có thể tùy chỉnh menu tệp của mình bằng cách đi tới Công cụ-> Tùy chỉnh, chuyển đến tab lệnh và thêm lệnh.
Cướp

Có một cài đặt chung nào ảnh hưởng đến tất cả các tệp cùng nhau không? Thật đau đớn khi làm điều này cho tất cả các nguồn theo một giải pháp.
Klaus

12

Để bật tùy chọn BẬT / TẮT, hãy làm theo các bước dưới đây từ menu thanh :

Công cụTùy chọnMôi trườngTài liệuKiểm tra kết thúc dòng nhất quán khi tải


7

Tệp bạn đang chỉnh sửa đã được chỉnh sửa với một số trình chỉnh sửa khác không sử dụng cùng một kết thúc dòng, dẫn đến một tệp có kết thúc dòng hỗn hợp.

Các ký tự ASCII được sử dụng cho các kết thúc dòng là:

CR, Vận chuyển trở lại
LF, Nguồn cấp dữ liệu

Windows = CRLF
Mac OS 9 trở về trước = CR
Unix = LF


6

Bài viết mới trên Wikipedia có thể giúp bạn hiểu. Đây là một đoạn trích:

Các quy ước dòng mới khác nhau thường khiến các tệp văn bản đã được chuyển giữa các hệ thống thuộc các loại khác nhau được hiển thị không chính xác. Ví dụ: các tệp có nguồn gốc trên hệ thống Unix hoặc Apple Macintosh có thể xuất hiện dưới dạng một dòng dài trên một số chương trình chạy trên Microsoft Windows. Ngược lại, khi xem tệp có nguồn gốc từ máy tính Windows trên hệ thống Unix, CR phụ có thể được hiển thị dưới dạng ^ M hoặc ở cuối mỗi dòng hoặc ngắt dòng thứ hai.


5

Điều đó có nghĩa là, ví dụ, một số dòng văn bản của bạn có <Carriage Return><Linefeed>(tiêu chuẩn Windows) và một số kết thúc chỉ bằng một <Linefeed>(tiêu chuẩn Unix).

Nếu bạn nhấp vào 'có', những dòng cuối trong tệp nguồn của bạn sẽ được chuyển đổi để có tất cả định dạng giống nhau.

Điều này sẽ không tạo ra bất kỳ sự khác biệt nào đối với trình biên dịch (vì các dòng cuối chỉ được tính là khoảng trắng), nhưng nó có thể tạo ra một số khác biệt so với các công cụ khác (ví dụ: 'diff' trên hệ thống kiểm soát phiên bản của bạn).


4

Nó không chỉ là Visual Studio ... Nó sẽ là bất kỳ công cụ nào đọc các tệp, trình biên dịch, trình liên kết, v.v. mà sẽ phải có khả năng xử lý nó.

Nói chung (để phát triển phần mềm), chúng tôi chấp nhận sự cố kết thúc dòng đa nền tảng, nhưng hãy để phiên bản kiểm soát phần mềm xử lý.


1
Tôi đồng ý. Tốt nhất để cho hệ thống SCM của bạn làm điều đó. Nếu bạn đang sử dụng svn, hãy xem thêm stackoverflow.com/questions/15687/iêu
kgriffs

Hoàn toàn đồng ý. Điều gì xảy ra nếu tôi đang làm việc trên một dự án và tôi trên Windows và đồng đội của tôi đang sử dụng Mac. Chúng tôi sẽ liên tục thay đổi CR thành CRLF và quay lại. Tốt nhất để cho SCM trừu tượng mà đi. Hầu hết các câu trả lời chỉ cho rằng mọi người đang tự làm việc hoặc mọi người làm việc với mã đang sử dụng Windows.
bytedev

3

Khi bạn sao chép dán một cái gì đó từ web, bạn có thể nhận được các kết thúc dòng không nhất quán.
Để khắc phục điều này, bạn có thể sử dụng tiện ích mở rộng Visual Studio "Line Endings Unifier" có thể làm cho dòng kết thúc tự động nhất quán trong khi lưu tệp.

nhập mô tả hình ảnh ở đây


2

Có một bổ trợ cho Visual Studio 2008 chuyển đổi cuối định dạng dòng khi tệp được lưu. Bạn có thể tải xuống tại đây: http://grebulon.com/software/stripem.php


Điều này có thể giúp đỡ khi bạn gặp lỗi "kết thúc dòng không nhất quán" từ svn.
kgriffs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.