ตั้งค่าการเข้ารหัสและการเข้ารหัสไฟล์เป็น utf-8 ใน Vim


104

สองคำสั่งนี้ต่างกันอย่างไร?

  • set encoding=utf-8
  • set fileencoding=utf-8

ฉันต้องตั้งค่าทั้งสองอย่างเมื่อต้องการใช้ utf-8 หรือไม่

นอกจากนี้ฉันต้องตั้งค่าการเข้ารหัสไฟล์ด้วยsetหรือsetglobalไม่


โปรดทราบว่าการตั้งค่าการเข้ารหัสใน LOCALE ของคุณจะปลอดภัยกว่าแทนที่จะบังคับเป็น Vim ในกรณีที่คุณแก้ไขไฟล์ที่ไม่ใช่ Unicode คุณจะได้รับผลลัพธ์เช่นเดียวกับค่าเริ่มต้นเป็น LOCALE และคุณจะไม่ทำให้อักขระแปลกปลอมผิดพลาด
เวลา

คำตอบ:


95

TL; ดร

ในกรณีแรกset encoding=utf-8คุณจะเปลี่ยนการเข้ารหัสเอาต์พุตที่แสดงในเทอร์มินัล

ในกรณีที่สองกับset fileencoding=utf-8คุณจะเปลี่ยนการส่งออกการเข้ารหัสของไฟล์ที่เป็นลายลักษณ์อักษร

ตามที่ระบุไว้โดย @Dennis คุณสามารถตั้งค่าทั้งสองอย่างใน ~ / .vimrc ของคุณได้หากคุณต้องการทำงานอยู่utf-8เสมอ

รายละเอียดเพิ่มเติม

จากวิกิของ VIM เกี่ยวกับการทำงานกับ Unicode

" encodingกำหนดว่ากลุ่มจะแสดงอักขระอย่างไรภายใน Utf-8 จำเป็นสำหรับรสชาติส่วนใหญ่ของ Unicode"

" fileencodingตั้งค่าการเข้ารหัสสำหรับไฟล์ใดไฟล์หนึ่ง (โลคัลเป็นบัฟเฟอร์);: setglobal ตั้งค่าเริ่มต้นสามารถใช้ค่าว่างได้โดยค่าเริ่มต้นจะเหมือนกับ 'การเข้ารหัส' หรือคุณอาจต้องการตั้งค่าการเข้ารหัส ucs อย่างใดอย่างหนึ่ง มันอาจทำให้ไฟล์ดิสก์เดียวกันใหญ่ขึ้นหรือเล็กลงขึ้นอยู่กับการผสมผสานของตัวละครของคุณนอกจากนี้ IIUC, utf-8 ยังคงเป็น big-endian เสมอ (high bit ก่อน) ในขณะที่ ucs สามารถเป็น big-endian หรือ little-endian ได้ดังนั้นหากคุณ ใช้มันคุณอาจจะต้องตั้งค่า "ระเบิด" (ดูด้านล่าง) "


3
ขออภัยฉันไม่เข้าใจ fileencoding ทำอะไรได้มากกว่ากัน?
Kiraly Zoltan

26
ในกรณีแรกคุณจะเปลี่ยนการเข้ารหัสเอาต์พุตที่แสดงในเทอร์มินัล ในกรณีที่สองคุณจะเปลี่ยนการเข้ารหัสเอาต์พุตของไฟล์ที่เขียน
Adrien Lacroix

1
+1 สำหรับคำตอบที่สั้นและไพเราะแทนที่จะใช้เอกสารทางการซ้ำ! :)
425nesp

vim -c "set encoding=utf-8" file.extถ้าจำเป็นเฉพาะกิจโดยตรงจากบรรทัดคำสั่ง
Hans Ginzel

89
set encoding=utf-8  " The encoding displayed.
set fileencoding=utf-8  " The encoding written to file.

คุณอาจตั้งค่าทั้งสองอย่างใน~/.vimrcกรณีที่คุณต้องการทำงานกับ utf-8 อยู่เสมอ


0

คุณสามารถตั้งค่าตัวแปร 'fileencodings' ใน. vimrc ของคุณ

นี่คือรายการการเข้ารหัสอักขระที่พิจารณาเมื่อเริ่มแก้ไขไฟล์ที่มีอยู่ เมื่อไฟล์ถูกอ่าน Vim จะพยายามใช้การเข้ารหัสอักขระที่กล่าวถึงครั้งแรก หากตรวจพบข้อผิดพลาดให้ลองทำข้อผิดพลาดถัดไปในรายการ เมื่อพบการเข้ารหัสที่ใช้งานได้ 'fileencoding' จะถูกตั้งค่าเป็น หากทั้งหมดล้มเหลว 'fileencoding' จะถูกตั้งค่าเป็นสตริงว่างซึ่งหมายความว่าจะใช้ค่าของ 'การเข้ารหัส'

ดู :help filencodings

หากคุณทำงานกับเช่น cp1252 บ่อยๆคุณสามารถเพิ่มได้ที่นั่น:

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