ฉันจะเปลี่ยนการเข้ารหัสไฟล์ด้วย vim ได้อย่างไร?


235

ฉันเคยใช้เป็นกลุ่มในการแก้ไขจุดสิ้นสุดของไฟล์:

$ file file
file: ASCII text, with CRLF line terminators
$ vim file
:set ff=mac
:wq
$ file file
file: ASCII text, with CR line terminators

เป็นไปได้หรือไม่ที่จะใช้กระบวนการที่คล้ายกันเพื่อเปลี่ยนการเข้ารหัส Unicode ของไฟล์? ฉันกำลังลองสิ่งต่อไปนี้ซึ่งใช้งานไม่ได้:

$ file file.xml
file.xml: Unicode text, UTF-16, little-endian
$ vim file
:set encoding=utf-8
:wq
$ file file.xml
file.xml: Unicode text, UTF-16, little-endian

ฉันเห็นบางคนบอกว่าเขาสามารถ "ตั้ง fileencoding = utf-8 จากนั้นอัปเดตและเขียนไฟล์และใช้งานได้" แต่ดูเหมือนว่าฉันจะหายไปบางสิ่งบางอย่างหรืออื่น ๆ ที่เขาสับสน ฉันไม่รู้ว่าเขาหมายถึงอะไรโดย "แล้วอัปเดต"

คำตอบ:



163

ขอให้สังเกตว่ามีความแตกต่างระหว่าง

ตั้งค่าการเข้ารหัส

และ

ตั้งค่าการเข้ารหัสไฟล์

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


1
ขอบคุณ! Apache กำลังแสดงผล utf-8 ดังนั้นจึงเป็น php ดังนั้นเบราว์เซอร์จึงกล่าวว่าเป็นกลุ่มดังนั้นset encodingและยังมีหน้าเว็บที่แสดงตัวอักษร mangled ที่ไม่เป็นมาตรฐาน iso-8859-1 ใช้set fileencodingแสดงให้เห็นว่า 'Latin1' สวย
Adriano Varoli Piazza

77

ในขณะที่ใช้เสียงเรียกเข้าเป็นไปได้อย่างสมบูรณ์แบบทำไมคุณไม่ใช้ iconv? ฉันหมายถึง - การโหลดโปรแกรมแก้ไขข้อความเพื่อทำการแปลงการแปลงดูเหมือนว่าใช้ค้อนใหญ่เกินไปสำหรับเล็บที่เล็กเกินไป

แค่:

iconv -f utf-16 -t utf-8 file.xml > file.utf8.xml

และคุณทำเสร็จแล้ว


19
ข้อเสีย iconv อาจไม่สามารถใช้งานได้ง่ายบน Windows
Adriano Varoli Piazza

2
@AdrianoVaroliP Piazza ไม่เป็นกลุ่ม

1
ฉันจะบอกว่าการดาวน์โหลด "เพียงแค่ติดตั้ง" หลายครั้งแม้กระทั่งรุ่นพกพา "ก็ถือว่า" ใช้ได้ง่าย "
Adriano Varoli Piazza

2
@ adriano-varoli-p Piazza No, iconv สามารถใช้ได้บน Windows ที่มี Cygwin และ MingW ตามที่ @ coder-tim ระบุไว้
t0r0X

1
@mario ไม่เป็นกลุ่มได้อย่างง่ายดายมากบน Windows: vim.org/download.php#pc
t0r0X

52

เช่นเดียวกับขั้นตอนของคุณการตั้งค่าการเข้ารหัสไฟล์ควรใช้งานได้ อย่างไรก็ตามฉันต้องการเพิ่ม "set bomb" หนึ่งรายการเพื่อช่วยแก้ไขพิจารณาว่าไฟล์เป็น UTF8

$ vim file
:set bomb
:set fileencoding=utf-8
:wq

8
ขอบคุณสำหรับคำตอบของคุณมันทำให้ฉันเรียนรู้เพิ่มเติมเกี่ยวกับเครื่องหมายคำสั่ง UTF อย่างไรก็ตาม FYI การตั้งค่า BOM นั้นไม่จำเป็น / ไม่เหมาะสำหรับ UTF-8 เนื่องจากไม่ใช่รูปแบบความยาวไบต์คงที่เช่น 16 หรือ 32 ดูที่นี่สำหรับคำอธิบายและการอ้างอิง มันไม่ใช่ปัญหา (และเป็นประโยชน์มาก) สำหรับเสียงเรียกเข้าฉันแค่คิดว่าผู้คนควรตระหนักว่ามันอาจทำให้เกิดปัญหาความเข้ากันได้ที่อื่น
joelhardi

2
มันเป็นbombหรือbomและเป็นได้unsetหรือไม่ แก้ไข : set nobombใช่คุณสามารถลบออกได้ผ่านทาง
icedwater

6
ใช่ VIm ตั้งเราbomb(กับ ab)
ruffin

ต่อเอกสาร:set bombเปิดอยู่ถ้า:set fenc=utf-8.. ดู:he bomb
Evan Carroll

12
ทั้งหมดเข้ารหัสฐานของเราอยู่ในขณะนี้เป็นของ UTF-8
roblogic

6

มันอาจมีประโยชน์ในการเปลี่ยนการเข้ารหัสบนบรรทัดคำสั่งก่อนที่จะอ่านไฟล์:

rem On MicroSoft Windows
vim --cmd "set encoding=utf-8" file.ext
# In *nix shell
vim --cmd 'set encoding=utf-8' file.ext

ดูเริ่มต้น--cmd ,


3
รูปแบบแรกควรทำงานกับ * nix shells ด้วย 'single quotes'จำเป็นต้องใช้เพื่อหลีกเลี่ยงอักขระเมตาทั้งหมดซึ่งโดยปกติจะไม่ใช่สิ่งที่คุณต้องการ
jpaugh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.