ฉันได้รับ^Mตัวละครใน vimrc ของฉันและมันทำลายการกำหนดค่าของฉัน
:digraphsภายในกลุ่มจะแสดงตาราง digraph ที่ @LightnessRacesinOrbit เชื่อมโยงกับ
preg_replace('/[\x01]/', ' ' ,$str); Hope หวังว่าจะช่วยได้
ฉันได้รับ^Mตัวละครใน vimrc ของฉันและมันทำลายการกำหนดค่าของฉัน
:digraphsภายในกลุ่มจะแสดงตาราง digraph ที่ @LightnessRacesinOrbit เชื่อมโยงกับ
preg_replace('/[\x01]/', ' ' ,$str); Hope หวังว่าจะช่วยได้
คำตอบ:
Unix ใช้ 0xA สำหรับอักขระขึ้นบรรทัดใหม่ Windows ใช้การรวมกันของอักขระสองตัว: 0xD 0xA 0xD เป็นอักขระการคืนสินค้า ^Mเป็นวิธีที่ vim แสดง 0xD (0x0D = 13, M คือตัวอักษรที่ 13 ในตัวอักษรภาษาอังกฤษ)
คุณสามารถลบ^Mตัวละครทั้งหมดโดยการเรียกใช้สิ่งต่อไปนี้:
:%s/^M//g
ไหน^Mจะถูกป้อนโดยถือลงCtrlและการพิมพ์vตามด้วยแล้วปล่อยm Ctrlบางครั้งก็เป็นตัวย่อว่า^V^Mแต่โปรดทราบว่าคุณต้องป้อนตามที่อธิบายไว้ในประโยคก่อนหน้าแทนที่จะพิมพ์ออกมาอย่างแท้จริง
นิพจน์นี้จะแทนที่การเกิดขึ้นทั้งหมด^Mด้วยสตริงว่าง (คือไม่มีอะไร) ฉันใช้สิ่งนี้เพื่อกำจัด^Mไฟล์ที่คัดลอกจาก Windows เป็น Unix (Solaris, Linux, OSX)
^Mอักขระถ้าไฟล์นั้นมีจุดสิ้นสุดของบรรทัดที่ไม่ตรงกัน ใช้คำสั่งจาก Tomasz จากนั้นพิมพ์:fileformat={unix|dos|mac}ตามระบบปฏิบัติการที่คุณกำหนดเป้าหมาย หากมีเพียงไม่กี่บรรทัดโดยไม่มีตัวละครที่คุณอาจต้องการ^M :fileformat=dosหากคุณกำลังแก้ไขไฟล์ในโปรแกรมแก้ไขอื่นนอกเหนือจาก vim ต้องแน่ใจว่ามันได้รับการกำหนดค่าให้ตรงกับจุดสิ้นสุดของบรรทัด (Notepad จะไม่ทำสิ่งนี้ แต่เครื่องมือแก้ไขที่มีชื่อเสียงเช่น Notepad ++ หรือ TextMate จะ)
viคำสั่งนั้นจะต้องพิมพ์ด้วยตนเอง เพียงแค่วางลงในเทอร์มินัลเปิดที่มีการviทำงานอยู่จะทำให้เกิดข้อผิดพลาด "ไม่พบรูปแบบ"
:%s/\r//gเพื่อแทนที่ carriage return ในไฟล์ของฉัน ไม่พบรูปแบบ ^ V ^ M ในไฟล์ที่ฉันมีอักขระ ^ M จำนวนมาก
:%s/\r//g
ทำงานให้ฉันวันนี้ แต่สถานการณ์ของฉันอาจแตกต่างกันเล็กน้อย
:%s/\r//จะพอเพียง
หากต้องการแปลบรรทัดใหม่แทนที่จะลบ:
:%s/\r/\r/g
\rมีพฤติกรรมที่แตกต่างกันในส่วนการค้นหากับส่วนแทนที่ ดูstackoverflow.com/a/3834303เป็นตัวอย่าง
:%s/\r//g
อาจหมายความว่าคุณได้รับคืนตลับหมึก (ระบบปฏิบัติการที่แตกต่างกันใช้วิธีการส่งสัญญาณในตอนท้ายที่ต่างกัน)
ใช้dos2unixเพื่อแก้ไขไฟล์หรือตั้งค่ารูปแบบไฟล์เป็นกลุ่ม:
set ffs=unix,dos
สมมติว่าไฟล์ข้อความของคุณคือ - file.txt จากนั้นเรียกใช้คำสั่งนี้ -
dos2unix file.txt
มันจะแปลงไฟล์ข้อความจาก dos เป็นรูปแบบ unix
ฉันได้รับไฟล์ข้อความที่สร้างขึ้นบนเครื่อง Windows โดยผู้ใช้ Mac และต้องการนำเข้าสู่ Linux MySQL DB โดยใช้load dataคำสั่ง
ถึงแม้ว่า VIM จะแสดงตัวอักษร '^ M' แต่ก็ไม่ได้ผลใด ๆ สำหรับปัญหาเฉพาะของฉัน แต่ข้อมูลจะนำเข้า แต่ก็เสียหายเสมอในบางวิธี วิธีการแก้ปัญหาก็ค่อนข้างง่ายในที่สุด (หลังจากแห้วมาก)
การแก้ไข: การดำเนินการdos2unix สองครั้งในไฟล์เดียวกันนั้นเป็นการหลอกลวง! การใช้fileคำสั่งแสดงสิ่งที่เกิดขึ้นระหว่างทาง
$ file 'file.txt'
file.txt: ASCII text, with CRLF, CR line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text, with CRLF line terminators
$ dos2unix 'file.txt'
dos2unix: converting file file.txt to UNIX format ...
$ file 'file.txt'
file.txt: ASCII text
และเวอร์ชันสุดท้ายของไฟล์นำเข้าอย่างสมบูรณ์ในฐานข้อมูล
ในระบบปฏิบัติการยูนิกซ์อาจใช้คำสั่ง 'tr' ได้ง่ายกว่า
cat file1.txt | tr "\r" "\n" > file2.txt
ฉันลบทั้งหมดด้วย sed:
sed -i -e 's/\r//g' <filename>
สามารถแทนที่ด้วยสตริงหรืออักขระอื่น:
sed -i -e 's/\r/string/g' <filename>
sedคำสั่งเหล่านั้นใช้ได้กับ GNU / Linux sedแต่อาจต้องปรับแต่ง BSD (รวมถึง macOS)
คุณสามารถแก้ไขปัญหานี้ในกลุ่มโดยใช้
:1,$s/^V^M//g
โดยที่ ^ คืออักขระควบคุม
^Mคือสิ่งที่
นี่เป็นสิ่งเดียวที่ทำงานในกรณีของฉัน:
:e ++ff=dos
:wq
หากแบ่งการกำหนดค่าของคุณและจำเป็นต้องใช้อักขระ ^ M ในการแมปคุณสามารถแทนที่อักขระ ^ M ด้วย<Enter>หรือแม้กระทั่ง<C-m>(ทั้งสองพิมพ์เป็นลำดับอักขระอย่างง่ายดังนั้นอักขระ 7 และ 5 ตามลำดับ)
นี่เป็นวิธีเดียวที่แนะนำและพกพาได้ในการจัดเก็บคีย์โค้ดพิเศษในการแมป
ใน FreeBSD คุณสามารถล้างข้อมูล^Mด้วยตนเองโดยพิมพ์ดังต่อไปนี้:
:%s/ Ctrl+ V, จากนั้นCtrl+ M, จากนั้นCtrl+ Mอีกครั้ง
หากคุณไม่ได้ระบุfileformatเจตนาอื่น (เช่น:e ++ff=unixสำหรับไฟล์ Windows) อาจเป็นไปได้ว่าไฟล์เป้าหมายมี EOL ผสม
ตัวอย่างเช่นหากไฟล์มีบางบรรทัดที่มี<CR><NL>ตอนจบและอื่น ๆ ที่มี
<NL>ตอนจบและfileformatตั้งเป็นunixVim โดยอัตโนมัติเมื่ออ่านมัน^M (<CR>)จะปรากฏขึ้น ในกรณีดังกล่าวfileformatsเข้ามาเล่น ดู:help ffsรายละเอียดที่
ฉันได้ค้นพบว่าฉันได้สร้างมลพิษให้กับไฟล์เป็นเวลาหลายสัปดาห์เนื่องจากอินสแตนซ์ Homebrew Mvim ของฉันถูกตั้งค่าให้ใช้ filetype = dos ทำการเปลี่ยนแปลงที่จำเป็นใน. vimrc ....
ลอง:%s/\^M//อย่างน้อยก็ใช้งานได้สำหรับฉัน