ไม่สามารถพิมพ์ Unicode ด้วย Gvim และ VIM บน Windows 7


11

ฉันต้องการพิมพ์ภาษาต่าง ๆ โดยใช้ (g) Vim แต่เมื่อฉันเปลี่ยนเป็นภาษาอื่นโดยใช้แถบภาษา (ตัวอักษรเทวนาครีหรือภาษาฮินดี) และพิมพ์อะไรก็ได้ (g) vim จะปรากฏ??? ??ขึ้น

สิ่งที่ฉันพยายาม:

write ++enc=utf-8 foo.txt  
set fileencoding=utf-8   
set enc=utf-8

ข้อมูล:

  • รุ่น GVim: 7.4 และยังมี + multi_byte
  • ไม่มีการเปลี่ยนแปลงในไฟล์ vimrc เริ่มต้น

ฉันเพิ่งเริ่มต้นด้วย (g) เป็นกลุ่ม


5
อาจเป็นเรื่องตัวอักษร คุณใช้แบบอักษรใด
muru

1
7 แบบอักษร (consolas, 2 courier, 2 lucida, fixedsys และเทอร์มินัล) แสดงอยู่ใน gvim ฉันลองพวกเขาทั้งหมด ในขณะที่ระบบของฉันมีแบบอักษรอื่น ๆ เช่นกัน แต่ gvim แสดงผลเพียง 7 ฉันยังได้ติดตาม: stackoverflow.com/questions/3766204/vim-doesnt-support-unicodeแต่ก็ยังไม่มีโชค
msinfo

3
"ภาษาอื่น" ค่อนข้างคลุมเครือ ภาษาอะไร? ขัด? ภาษาฮิบรู? ชาวจีน? คลิงออน? หากคุณใช้ภาษาที่ไม่ชัดเจนอาจเป็นไปได้ว่าไม่มีแบบอักษรเหล่านั้นรองรับภาษานั้น
Martin Tournoij

1
ในกรณีของฉันฉันลองมาลายาลัมกับ GVim 7.4.800 (หรือราว ๆ นั้น) ด้วยตัวอักษรUbuntu Mono สำหรับข้อความตัวอย่างให้ดูมาลายาลัมวิกิพีเดีย บน Linux (Ubuntu และ Arch) ด้วยเทอร์มินัลและแบบอักษร GVim ที่ตั้งค่าเป็น Ubuntu Mono มาลายาลัมจะปรากฏขึ้นแม้ว่ามันจะถูกบีบให้เห็นก็ตาม ฉันลองแบบอักษร msinfo อื่น ๆ ที่กล่าวถึงในความคิดเห็นที่สอง
muru

1
บน Linux gvim สามารถแสดงอักขระที่คุณต้องการได้เนื่องจาก Pango จะดึง glyphs จากแบบอักษรอื่น ๆ เพื่อให้สามารถแสดงอักขระทั้งหมดได้ นั่นเป็นสาเหตุที่ตัวละครดูแตกต่างจากข้อความที่เหลือของคุณ หากคุณลองแบบเดียวกันใน xterm คุณจะไม่เห็นอักขระทั้งหมดเนื่องจากใช้แบบอักษรเดียว ฉันสงสัยว่ามีบางสิ่งที่คล้ายกันเกิดขึ้นใน Windows
jamessan

คำตอบ:


5

ดูเหมือนว่าการเข้ารหัสเริ่มต้นจะเป็นlatin1:

:set encoding?
  encoding=latin1

เมื่อป้อนอักขระ Vim จะพยายามแปลงจากชุดอักขระที่เข้ามา (อาจเป็น Unicode) เป็น latin-1 สิ่งนี้ล้มเหลวเนื่องจาก latin-1 ไม่มีอักขระเหล่านี้ ดังนั้นคำถามเครื่องหมาย

การเปิดไฟล์ที่มีอยู่ (บันทึกด้วย Notepad หรือโปรแกรมอื่น ๆ ) ควรส่งผลให้ข้อความที่อ่านไม่ออกเนื่องจากตอนนี้ Vim กำลังพยายามอ่านไบต์และแปลความหมายตามชุดอักขระ latin-1 และไม่แปลงเป็นชุด latin-1

คุณจะต้องการที่จะใช้utf-8หรือบางส่วนเช่น:

:set encoding=utf-8

หลังจากนั้นสคริปต์มาลายาลัมก็ดูเหมือนจะทำงาน

โปรดทราบว่าสิ่งนี้จะไม่ทำให้เครื่องหมายคำถามที่มีอยู่แล้วทำงาน สิ่งเหล่านี้จะถูกแปลงเป็นเครื่องหมายคำถาม (ตัวอักษร0x3f) ในอินพุต ไม่มีทางที่จะกลับสิ่งที่ป้อน ฉันสงสัยว่านี่เป็นที่มาของความสับสนของคำถามนี้

:help 'encoding'ยังเห็น

ในฐานะ sidenote, glyphs ที่ไม่ได้รับการสนับสนุนในฟอนต์มักจะแสดงด้วย glyph ที่แตกต่างกัน; สิ่งนี้แตกต่างกันไปตามแบบอักษร แต่โดยทั่วไปจะเป็นบล็อกสี่เหลี่ยมหรือเครื่องหมายคำถามที่มีสไตล์แตกต่างกัน คุณสามารถเห็นความแตกต่างระหว่างเครื่องหมายคำถาม "ของจริง" และสัญลักษณ์ที่ไม่รองรับg8ซึ่งจะแสดงรหัสอักขระ


1
ฉันต้องพิมพ์ตัวอักษรเทวนาครีหรือภาษาฮินดี ก่อนหน้านี้การเข้ารหัสถูกตั้งค่าเป็น latin1 มันถูกเปลี่ยนตามคำแนะนำของคุณเป็น utf-8 แต่ยังไม่มีตัวอักษรเทวนาครีหรือฮินดูปรากฏให้เห็น แต่เมื่อฉันคัดลอกกล่องเหล่านั้น (แสดงผลโดย VIM) จาก VIM ไปยังเบราว์เซอร์หรือ Notepad ++ พวกเขาดูเหมือนอักขระ Unicode ดังนั้น VIM จึงจดจำได้ แต่ไม่สามารถแสดงได้
msinfo

1
@msinfo คุณกำลังใช้เวอร์ชั่นใด? คุณพูดถึง 7.4 แต่ไม่ได้พูดถึงระดับแพตช์? ผมใช้ 1024/07/04 จาก vim.org
Martin Tournoij

1
ดูเหมือนยกเลิก patched ที่ผมพยายามที่จะหาออกจากหนึ่งในคำตอบของคุณ ;-) บนvi.stackexchange.com/questions/2466/... Vim - รุ่นไม่แสดงข้อมูลแพตช์ใด ๆ ฉันไม่ได้ทำการเปลี่ยนแปลงปลั๊กอินหรือแพทช์หลังจากการติดตั้ง
msinfo

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