วิธีดูอักขระ UTF-8 ใน VIM หรือ Gvim


108

ฉันทำงานบนหน้าเว็บที่เกี่ยวข้องกับสคริปต์ที่ไม่ใช่ภาษาอังกฤษเป็นครั้งคราวส่วนใหญ่ใช้ชุดอักขระ utf-8, VIM และ Gvim ไม่แสดงอักขระ UTF-8 อย่างถูกต้อง

ใช้ VIM 7.3.46 บน windows 7 64 บิตด้วยset guifont=Monaco:h10ใน _vimrc

มีวิธีแก้ไขปัญหานี้หรือไม่?

อัปเดต: ฉันได้ใช้ googled และพบว่าset guifontwideทำหน้าที่เป็นทางเลือกที่สองสำหรับภาษาในภูมิภาค

ฉันเพิ่มบรรทัดต่อไปนี้ใน _vimrc และปัญหาส่วนใหญ่ของฉันได้รับการแก้ไขแล้ว

set enc=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf8,prc
set guifont=Monaco:h11
set guifontwide=NSimsun:h12

ดังกล่าวข้างต้น NSimsun อักษรทำงานสำหรับจีน, ปัญหาคือผมไม่ทราบว่าพวกเขามีชื่ออักษรที่จะทำงานร่วมกับเสียงเรียกเข้า, Courier Newกล่าวคือCourier_NewยังNSimsunไม่มีที่ไหนเลยในไดเรกทอรีตัวอักษร แบบอักษรที่ฉันต้องการใช้คือLathaแต่ฉันไม่รู้วิธีใช้ในไฟล์ _vimrc set guifontwide=latha:h12หรือset guifontwide=Latha:h12ไม่ทำงาน

ถ้าผมประสบความสำเร็จในการตั้งค่าguifontwideไปlathaแล้วปัญหาของฉันจะได้รับการแก้ไขวิธีการทำมันได้หรือไม่


มูลค่า'guifont'และมูลค่าของ'guifontwide'อะไร? นอกจากนี้คุณใช้ระบบปฏิบัติการอะไรและ vim เวอร์ชันใด
Benoit

คุณสาธิชหาทางแก้ปัญหานี้ได้ไหม ฉันพยายามพิมพ์ gVim ด้วยซอฟต์แวร์ eKalappai แต่ vim แสดงให้ฉันเห็นเท่านั้น ?? อักขระ (เห็นได้ชัดว่าบันทึกด้วยวิธีเดียวกัน)
sundar - คืนสถานะ Monica

@sundar ไม่ฉันยอมแพ้: |
Sathish Manohar

ปัญหาของฉันคือ inconsolata-g ไม่รองรับอักขระ utf-8 ในเอกสารของฉัน
AndrewPK

การใช้set guifontwide=NSimsun:h12ล้มเหลวสำหรับฉันกล่าวว่า "แบบอักษรกว้างไม่ถูกต้อง" อาจเป็นปัญหาเดียวกันกับที่ไม่ใช่พื้นที่เดียว
mikew

คำตอบ:


62

ลองโหลดเอกสารซ้ำโดยใช้:

:e! ++enc=utf8

หากได้ผลคุณควรเปลี่ยนการ fileencodingsตั้งค่าใน. vimrc ของคุณ


2
ไม่เปลี่ยนแปลงอะไรสำหรับฉัน
Thomas Levesque

8
อย่าเรียกใช้สิ่งนี้ก่อนบันทึกงานของคุณเนื่องจากจะล้างการเปลี่ยนแปลงที่คุณทำ :uจะช่วยคุณได้

นอกจากนี้ยังตั้งค่าไฟล์เป็นแบบอ่านอย่างเดียวเมื่อคุณทำสิ่งนี้ดังนั้นคุณต้องเรียกใช้ด้วย:set noro
Matt Vukomanovic

2
ขอบคุณสำหรับสิ่งนี้. Vim ไม่ได้แสดง utf-8 ในกรณีของฉันเพราะฉันมีบล็อกข้อมูลไบนารี (ส่วนที่แนบข้อมูลหลายส่วน / แบบฟอร์ม) ตอนที่ฉันทำ:e! ++enc=utf8มันแสดง utf-8 แต่บ่น[ILLEGAL BYTE in line 286](ส่วนไบนารีบรรทัดแรก) ภายในไฟล์ ฉันเดาว่าพฤติกรรมเริ่มต้นคือการถอยกลับไปสู่การเข้ารหัสอื่น ๆ อย่างเงียบ ๆ เมื่อสิ่งนี้เกิดขึ้นกับการเปิด Vim อย่างไรก็ตามด้วยเหตุผลบางประการecho &encยังคงรายงาน utf-8 ในกรณีนั้น
Dmitry Minkovsky

1
@DmitryMinkovsky &encเป็นกลุ่มการเข้ารหัสที่ใช้ภายในเพื่อจัดเก็บเนื้อหาบัฟเฟอร์ การตั้งค่าที่มีการเข้ารหัสสำหรับไฟล์ปัจจุบันคือ&fenc
Benoit

61

คุณลอง

:set encoding=utf-8
:set fileencoding=utf-8

เหรอ?


5
ฉันได้ลองใช้การตั้งค่าทั้งสองนี้แล้วก็ยังมองไม่เห็นอักขระ utf-8
Sathish Manohar

1
-1. อันที่จริงไม่สามารถทำงานได้ ตัวเลือกทั้งสองนี้จะไม่โหลดไฟล์ซ้ำ อันแรกจะปรับเปลี่ยนวิธีการจัดเก็บบัฟเฟอร์ (และสิ่งอื่น ๆ ) ภายในกลุ่มที่สองจะระบุว่าคุณต้องการเปลี่ยนการเข้ารหัสของไฟล์ที่โหลดแล้วในบัฟเฟอร์ซึ่งจะมีผลเมื่อบันทึก
Benoit

:set encoding=utf8 จะรีเฟรชบัฟเฟอร์และหากปัญหาอยู่ในการเข้ารหัสที่ไม่ถูกต้องก็จะแก้ไขได้ ฉันเพิ่มset fileencoding=utf8ตัวเลือกดังนั้นคุณจะไม่พบข้อผิดพลาด "ไม่สามารถแปลงอักขระบางตัว" ที่สับสนที่สุดเมื่อทำการบันทึก
Maxim Sloyko

ตั้งค่าการเข้ารหัสใช้งานได้ ฉันเพิ่ม set encoding = utf8 เป็นไฟล์. vimrc และตอนนี้ทุกอย่างก็โอเคกับ utf8
Alexander Kim

บน OSX ฉันได้เพิ่มสองบรรทัดนี้ (โดยไม่มีเครื่องหมายโคลอน) ในของฉัน~/.vimrcและมันก็ใช้ได้ดี
lionello

8

หากคนญี่ปุ่นมาที่นี่โปรดเพิ่มบรรทัดต่อไปนี้ใน ~/.vimrc

set encoding=utf-8
set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

6

ใน Microsoft Windows gvim จะไม่อนุญาตให้คุณเลือกฟอนต์ที่ไม่ใช่แบบโมโนสเปซ น่าเสียดายที่ Latha เป็นแบบอักษรที่ไม่มีช่องว่าง

มีวิธีแฮ็คที่จะทำให้มันเกิดขึ้น: การใช้FontForge (คุณสามารถดาวน์โหลด Windows binary ได้จากhttp://www.geocities.jp/meir000/fontforge/ ) เพื่อแก้ไข Latha.ttf และทำเครื่องหมายเป็นแบบอักษรแบบ monospaced การทำเช่นนี้:

  1. โหลด fontforge เลือก latha.ttf
  2. เมนู: องค์ประกอบ -> ข้อมูลแบบอักษร
  3. เลือก "OS / 2" จากรายการด้านซ้ายในกล่องโต้ตอบข้อมูลแบบอักษร
  4. เลือกแท็บ "Panose"
  5. ตั้งค่าสัดส่วน = ช่องว่าง
  6. บันทึกเวอร์ชัน TTF ใหม่ของแบบอักษรนี้ทดลองใช้!

โชคดี!


1
ฉันไม่สามารถเปลี่ยนแบบอักษร latha เป็น monospace ได้ ฉันทำตามขั้นตอนของคุณอย่างถูกต้อง แต่ไฟล์ที่บันทึกไว้ยังไม่ทำงานเป็นแบบอักษร monospaced :(
Sathish Manohar

1
@Sathish Manohar 1) เขียนทับไฟล์ TTF ที่มีอยู่รีสตาร์ท Windows ของคุณแล้วลองใช้ หรือ 2) คุณสามารถบันทึก TTF เป็นไฟล์ใหม่และแก้ไขชื่อแบบอักษร ติดตั้งไฟล์ TTF ใหม่ แบบอักษรใหม่นี้ควรมีอยู่ในรายการของคุณ
Yi Zhao

หลังจากผ่านไปหลายปี (7 ปี) ต่อมามีฟอนต์ฟรีมากมายสำหรับ VIM แบบอักษร Google Noto google.com/get/noto ; และ Iosveka github.com/be5invis/Iosevka/releasesเป็นทางเลือกที่ดีมากในการประเมิน
Yi Zhao

3

ใน Linux ให้เปิดไฟล์คอนฟิกูเรชัน VIM

$ sudo -H gedit /etc/vim/vimrc

เพิ่มบรรทัดต่อไปนี้:

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8

บันทึกและออกและคำสั่งเทอร์มินัล:

$ source /etc/vim/vimrc

ในขณะนี้ VIM จะแสดงภาษาจีนอย่างถูกต้อง


2

ปัญหานี้ได้รับการแก้ไขแล้วหรือไม่?

ฉันมีปัญหาที่ gvim ไม่แสดงอักขระ Unicode ทั้งหมด (แต่เป็นเพียงชุดย่อยรวมถึงเครื่องหมาย umlauts และอักขระเน้นเสียง) ในขณะที่:set guifont?ว่างเปล่า ดูคำถามของฉัน หลังจากอ่านที่นี่การตั้งค่าguifontเป็นค่าที่เหมาะสมได้รับการแก้ไขสำหรับฉัน อย่างไรก็ตามฉันไม่ต้องการอักขระที่เกิน 2 ไบต์


1
อะไรคือมูลค่าที่เหมาะสมสำหรับ guifont? คุณใส่อะไรลงไป?
Christian

ฉันระบุค่าที่เหมาะกับฉันในคำตอบนี้
Tobias

2

ฉันไม่สามารถรับแบบอักษรอื่น ๆ ที่ฉันติดตั้งเพื่อแสดงในตัวแก้ไข Windows GVim ของฉันได้ดังนั้นฉันจึงเปลี่ยนไปใช้แบบอักษรที่Lucida Consoleรองรับ UTF-8 ที่ค่อนข้างดีกว่า เพิ่มสิ่งนี้ในตอนท้ายของคุณ_vimrc:

" For making everything utf-8
set enc=utf-8
set guifont=Lucida_Console:h9:cANSI
set guifontwide=Lucida_Console:h12

ตอนนี้ฉันเห็นอักขระ UTF-8 บางตัวเป็นอย่างน้อย


ในกรณีของฉัน cANSI ต้องเปลี่ยนเป็น cGREEK (แก้ไข -> เลือกแบบอักษร ... ใน GVim) ด้วยฟอนต์ Consolas เพื่อแสดงไฟล์ข้อความที่เข้ารหัส UTF-8 พร้อมอักขระกรีกอย่างถูกต้อง
hello_earth


0

งานนี้สำหรับฉันและไม่จำเป็นต้องเปลี่ยนไฟล์กำหนดค่าใด ๆ

vim --cmd "set encoding=utf8" --cmd "set fileencoding=utf8" fileToOpen

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