`^ M` ในหลายบรรทัดในไฟล์ซอร์สโค้ด ฉันจะลบออกได้อย่างไร


1

บางคนเพิ่งส่ง.cppไฟล์ซอร์สโค้ดสองสามตัวถึงฉัน ในการเปิดไฟล์ด้วย GNU Emacs หรือ GVIM ฉันพบว่ามันมีตัวละครแปลก ๆ^Mใกล้กับจุดจบของทุกบรรทัด

นี่คือภาพหน้าจอที่แสดงความหมายของฉันแก้ไขภาพหน้าจอ

เมื่อฉันเปิดไฟล์ต้นฉบับเหล่านี้ด้วย Gedit ฉันไม่เห็น^Mอักขระเหล่านี้ ฉันควรทำอย่างไร? มีคำถามมากมายที่นี่ดังนั้นการเปิดและดำเนินการค้นหาแทนที่โดยแทนที่ด้วยสตริงว่างเปล่าดูเหมือนว่าการดำเนินการทำลาย

ไฟล์เหล่านี้รวบรวมได้อย่างเพียงพอแล้วเมื่อฉันรวบรวม GCC เกิดขึ้นที่นี่คืออะไร. ฉันควรทำอย่างไร?


หากคุณจะร่วมมือกับบุคคลนี้อย่างต่อเนื่องคุณไม่ควรทำอะไรเลย พวกเขาจะไม่ก่อให้เกิดอันตรายใด ๆ และถ้าคุณส่งไฟล์ที่ถูกดัดแปลงกลับมาคุณอาจทำให้เกิดปัญหากับเขาเมื่อเขาพยายามที่จะใช้ไฟล์
Zoredache

คำตอบ:


6

ใน Unix, อักขระบรรทัดใหม่เป็น\nและในขณะที่ใน Windows \r\nมันเป็น \rหรือ^Mเป็นอักขระที่รับคืน

หากไฟล์ถูกเขียนในโปรแกรมแก้ไขในโหมด windows อักขระบรรทัดใหม่แต่ละตัวจะมีอักขระขึ้นบรรทัดใหม่ หากคุณบอกบรรณาธิการของคุณ (และหากเข้าใจ) เพื่อปฏิบัติต่ออักขระบรรทัดใหม่เหมือนกับใน windows คุณจะไม่เห็น^Mอักขระอีกต่อไป

อีกวิธีหนึ่งคุณสามารถเรียกใช้dos2unixบน codebase ของคุณเพื่อแก้ไขปัญหานี้

และในขณะที่คุณสังเกตอย่างถูกต้องคุณจะไม่เห็นปัญหาใด ๆ ในการรวบรวมเพราะนั่นไม่ใช่ตัวอักษรพิเศษใด ๆ ในรหัส แต่เป็นความไม่ตรงกันระหว่างการตีความอักขระขึ้นบรรทัดใหม่ใน windows และ linux


วิธีอื่น ๆ ในการทำเช่นนี้: sed.sourceforge.net/sed1line.txtภายใต้แปลงไฟล์จาก DOS เป็น UNIX และในทางกลับกัน
lupincho

1

คุณมีไฟล์ต้นฉบับพร้อมการลงท้ายบรรทัด Windows และ UNIX แบบผสม ในขณะที่ UNIX เพิ่งใช้ linefeed (บางครั้งแสดงเป็น ^ J) Windows ใช้ carriage-return + linefeed (บางครั้งแสดงเป็น ^ M ^ J) บรรณาธิการของคุณเห็นบรรทัด UNIX และบอกว่า "นี่ต้องเป็นไฟล์ UNIX" แต่จากนั้นเห็นจุดสิ้นสุดของบรรทัด Windows ที่กระจัดกระจายและกล่าวว่า "นี่เป็นอักขระพิเศษฉันต้องแสดงให้เห็น"

คุณสามารถลองแปลงไฟล์ได้ทั้งทางเดียวหรือทางอื่น คุณสามารถลองใช้คำสั่งdos2unixเพื่อแปลงเป็นจุดสิ้นสุดบรรทัด UNIX สิ่งนี้จะทำงานบนฝั่ง UNIX แต่ฝั่ง Windows ของคุณจะสับสนเว้นแต่ว่าคุณได้รับตัวแก้ไข Windows ที่รู้จักจุดสิ้นสุด UNIX

หรือคุณสามารถใช้unix2dosและทำให้เป็น Windows ทั้งหมด หากคุณสอดคล้องกับไฟล์ทั้งหมดตัวแก้ไข UNIX ของคุณ (ซึ่งมักจะรู้ว่าตอนจบของ Windows ดีกว่าตัวแก้ไข Windows ที่รู้ว่าตอนจบของ UNIX) น่าจะใช้ได้ เวลานี้ emacs / gvim สับสนเพียงเพราะไฟล์ไม่สอดคล้องกัน

ดังที่คุณได้เห็นคอมไพเลอร์ไม่สนใจว่าการลงท้ายบรรทัดคืออะไร


1

แหล่งข้อมูลเชิงลึก -> ตัวเลือก -> การตั้งค่า -> แท็บ "ไฟล์" -> สร้าง "Unix (LF)" ในเมนูรูปแบบไฟล์เริ่มต้น



0

เหตุผลที่คุณเห็นสิ่งเหล่านี้ใน emacs / vim เกิดจากการที่พวกเขาอ่านสิ่งต่าง ๆ / วิธีเข้ารหัสสิ่งต่างๆ ^Mเป็นจริงเพียงCarriage Return(กดปุ่ม Enter)

อย่างไรก็ตามคุณสามารถลองทำ (ในคำสั่งเนื่องจากฉันไม่รู้คำสั่งที่เหมาะสมใน Emacs) :set ff=unixจากนั้น:wซึ่งควรเปลี่ยนเป็นรูปแบบ Unix และกำจัดมันในครั้งต่อไปที่คุณเปิด (iirc)

หรือถ้าคุณต้องการอย่างชัดเจนเอา^Mจากเอกสารที่ไม่การค้นหา / แทนที่ (ในกลุ่มตั้งแต่ฉันเพียงรู้ว่า) :%s/<ctrl + v><ctrl + m>//gcด้วย

( ลิงก์นี้แสดงคำสั่งเกี่ยวกับวิธีการทำ S / R สำหรับการส่งคืนใน Emacs)

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