ฉันได้รับ^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
ตั้งเป็นunix
Vim โดยอัตโนมัติเมื่ออ่านมัน^M (<CR>)
จะปรากฏขึ้น ในกรณีดังกล่าวfileformats
เข้ามาเล่น ดู:help ffs
รายละเอียดที่
ฉันได้ค้นพบว่าฉันได้สร้างมลพิษให้กับไฟล์เป็นเวลาหลายสัปดาห์เนื่องจากอินสแตนซ์ Homebrew Mvim ของฉันถูกตั้งค่าให้ใช้ filetype = dos ทำการเปลี่ยนแปลงที่จำเป็นใน. vimrc ....
ลอง:%s/\^M//
อย่างน้อยก็ใช้งานได้สำหรับฉัน