Visual Studio หมายถึงอะไรโดยทำให้การสิ้นสุดของบรรทัดไม่สอดคล้องกัน


238

Visual Studio บอกฉันเป็นครั้งคราว:

การสิ้นสุดบรรทัดในไฟล์ต่อไปนี้ไม่สอดคล้องกัน คุณต้องการทำให้การจบบรรทัดเป็นปกติหรือไม่?

จากนั้นให้ฉันแบบเลื่อนลงกับมาตรฐานที่แตกต่างกันหรือบางสิ่งบางอย่างเช่น Windows, Mac, Unix และ Unicode สองสามอัน

สิ่งนี้จะหมายและสิ่งที่จะเกิดขึ้นถ้าฉันคลิกYes?


Visual Studio แสดงข้อความเดียวกันนี้ แต่ "ไฟล์" ที่อ้างถึงคือโฟลเดอร์! นั่นหมายความว่าอย่างไร?!
พันเอก Panic

ฉันทำอรรถประโยชน์เล็กน้อยเพื่อทำทั้งไดเรกทอรีหรือเรียกซ้ำผ่านชุดไดเรกทอรีสำหรับไฟล์ทั้งหมดของนามสกุลเฉพาะ (เช่น * .c หรือ * .h) แม้ว่าฉันจะใช้ Delphi แต่ยูทิลิตี้นี้ทำงานได้กับซอร์สโค้ดของ Windows ไฟล์ รหัสที่มารวมทั้งไบนารี (exe) มันจะรายงานว่าสายใดมี linefeeds พิเศษ (เช่นการคืนสินค้าที่ขาดหายไป) หรือการขึ้นบรรทัดใหม่ (เช่น linefeeds ที่หายไป) 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 เดี๋ยวก่อนตอนนี้คุณอยากให้ MS อ่านใจของคุณและรู้ว่าควรใช้อะไรดี? <g> ทีม VS ผิดทั้งสองทางใช่มั้ย Sheesh!
Ken White

6
โอ้ snap Ken คุณพูดถูกถ้าฉันบังเอิญแก้ไขไฟล์บางไฟล์ที่ฉันวางแผนที่จะคอมไพล์ใน 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 Version 10.0.40219.1 SP1Rel
DOK

1
@DOK บนเมนูไฟล์ของฉันที่ Visual Studio 2010 Premium version มันใช้งานได้ !!
ปีเตอร์

4
หากคุณไม่เห็นตัวเลือกคุณสามารถปรับแต่งเมนูไฟล์ได้โดยไปที่เครื่องมือ -> ปรับแต่งไปที่แท็บคำสั่งและเพิ่มคำสั่ง
Rob

มีการตั้งค่าทั่วไปที่มีผลกับไฟล์ทั้งหมดด้วยกันไหม? มันเป็นความเจ็บปวดที่จะทำเช่นนี้กับทุกแหล่งภายใต้วิธีการแก้ปัญหา
Klaus

12

หากต้องการเปิด / ปิดตัวเลือกให้ทำตามขั้นตอนด้านล่างจากแถบเมนู :

เครื่องมือตัวเลือกสภาพแวดล้อมเอกสารตรวจสอบว่าการสิ้นสุดบรรทัดที่สอดคล้องกับโหลด


7

ไฟล์ที่คุณกำลังแก้ไขได้รับการแก้ไขด้วยเครื่องมือแก้ไขอื่น ๆ ที่ไม่ได้ใช้การลงท้ายบรรทัดเดียวกันทำให้มีไฟล์ที่ลงท้ายด้วยการผสม

อักขระ ASCII ที่ใช้สำหรับการสิ้นสุดบรรทัดคือ:

CR, Carriage Return
LF, ป้อนบรรทัด

Windows = CRLF
Mac OS 9 หรือเก่ากว่า = CR
Unix = LF


6

บทความขึ้นบรรทัดใหม่ของ Wikipedia อาจช่วยคุณได้ นี่คือข้อความที่ตัดตอนมา:

ข้อตกลงการขึ้นบรรทัดใหม่ที่แตกต่างกันมักทำให้ไฟล์ข้อความที่ถูกถ่ายโอนระหว่างระบบประเภทต่าง ๆ แสดงอย่างไม่ถูกต้อง ตัวอย่างเช่นไฟล์ที่มาจากระบบ 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 "Line Endings Unifier" ซึ่งสามารถทำให้การลงท้ายบรรทัดสอดคล้องกันโดยอัตโนมัติในขณะที่บันทึกไฟล์

ป้อนคำอธิบายรูปภาพที่นี่


2

มี Add-in สำหรับ Visual Studio 2008 ที่แปลงจุดสิ้นสุดของรูปแบบบรรทัดเมื่อมีการบันทึกไฟล์ คุณสามารถดาวน์โหลดได้ที่นี่: http://grebulon.com/software/stripem.php


สิ่งนี้สามารถช่วยได้เมื่อคุณได้รับข้อผิดพลาด "การสิ้นสุดของบรรทัดที่ไม่สอดคล้อง" จาก svn
kgriffs
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.