ฉันจะใช้ vim เพื่อแปลงไฟล์เป็น utf8 ได้อย่างไร


119

ฉันมีไฟล์ข้อความ ฉันได้รับคำสั่งให้ทำให้เป็น UTF8 ฉันจะทำเช่นนั้นกับ Vim ได้อย่างไร?



คำตอบ:


179

หากคุณกำลังแก้ไขไฟล์ที่เข้ารหัสเป็น latin1 คุณจะพบว่า 'fileencoding' สำหรับบัฟเฟอร์นั้นถูกตั้งค่าเป็น latin1 ดังนั้นคุณจะต้องตั้งค่าการเข้ารหัสไฟล์ด้วยตนเองก่อนบันทึกไฟล์

:set fileencoding=utf8
:w myfilename

นอกจากนี้โปรดทราบว่าไฟล์ UTF8 มักขึ้นต้นด้วย Byte Order Mark (BOM) ซึ่งบ่งบอกถึง endianness BOMเป็นตัวเลือก แต่บางโปรแกรมใช้งานได้เฉพาะในการตรวจสอบการเข้ารหัสไฟล์ ภายใต้เงื่อนไขบางประการ Vim จะเขียน BOM แต่บางครั้งก็ไม่ได้ ในการตั้งค่า BOM อย่างชัดเจนให้ทำสิ่งนี้:

:set bomb

สำหรับข้อมูลเพิ่มเติม:help mbyte-optionsและและ :help utf8:help bomb


คำแนะนำนั้นใช้งานได้ดี แต่: 1) utf-8 ไม่มี endianness (เช่นvim help อธิบายว่า utf-8 BOM เป็นเพียงระบุว่าไฟล์นั้นคือ utf-8); 2) เมื่อคุณเปิดไฟล์อีกครั้งในภายหลังคุณต้องมีset fileencoding=utf-8อีกครั้งในด้านหน้า Vim ไม่สังเกตเห็น BOM ด้วยซ้ำถ้าคุณบอกให้เขียน (และมันเขียนจริง) เพื่อให้ utf-8 ทำงานได้คุณต้องมีสิ่งนั้นหรือset encoding=utf-8ในการตั้งค่าเริ่มต้นของคุณ อย่างน้อยนั่นคือเรื่องราวในระบบของฉัน
Stein

35
:w ++enc=utf-8 %

เพื่อเขียนไฟล์ในการเข้ารหัส utf-8 ลงในดิสก์


5
แม้ว่าจะถูกต้อง แต่คำตอบของคุณก็ไม่ควรรวบรวมคะแนนโหวตจำนวนมากเมื่อเทียบกับของ Eric Johnson เหตุผลก็คือว่าถ้าคุณไม่ได้ตั้งค่าfileencodingที่:w ++enc=utf-8เป็นช่วงเวลาหนึ่งที่ถูกต้อง แต่ในครั้งต่อไปที่คุณเรียก:wค่าของ'fileencoding'จะถูกนำมาใช้และถ้าคุณยังไม่ได้เปลี่ยนมัน (อย่างชัดเจนขณะที่การแก้ไขหรือโดยการโหลดไฟล์หวัง ที่'fencs'ตั้งค่าอย่างเหมาะสมและตรวจพบการเข้ารหัสจริง) การเข้ารหัสแบบเก่าจะกลับมา
Benoit

1
@ MichaelKrelin แฮ็กเกอร์การเปลี่ยนแปลงfileencodingยังเป็นคำตอบที่ถูกต้องสำหรับคำถามซึ่ง IMO ไม่ได้นำไปสู่นิสัยที่ไม่ดี แต่ตกลงนั่นเป็นเรื่องของอารมณ์ที่ฉันคิด
Benoit

3
@Benoit ฉันไม่ได้หมายความว่าคำตอบของ Eric นั้นไม่ถูกต้อง! ถ้าฉันพบอะไรแปลก ๆ เกี่ยวกับคำตอบของเขามันไม่ใช่เนื้อหา แต่ทำไมเขาถึงโพสต์คำถามและคำตอบสำหรับคำถามของเขาเองอย่างต่อเนื่อง :)
Michael Krelin - แฮ็กเกอร์

3
@ Michael Krelin - แฮ็กเกอร์: ตรวจสอบคำถามที่พบบ่อย ขอแนะนำให้ตอบคำถามของคุณเอง เป็นจุดรวมของหน้าถาม & ตอบเช่นนี้ ไม่สำคัญว่าใครจะตอบ
0xC0000022L

2
@ 0xC0000022L ครั้งสุดท้ายที่ฉันจะตรวจสอบ (ยังไม่ได้ตรวจสอบตอนนี้) มีอะไรบางอย่างเกี่ยวกับการขึ้นมาพร้อมกับวิธีการแก้ปัญหาหลังจากการทำวิจัยที่ไม่เกี่ยวกับคำถามและคำตอบที่โพสต์ในนาที ที่กล่าวว่าฉันแค่พูดถึงสิ่งที่แปลกเกี่ยวกับคำตอบของเขาไม่ใช่สิ่งที่ทำให้มันไม่ถูกต้องหรืออะไร
Michael Krelin - แฮ็กเกอร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.