Không thể nhập Unicode bằng Gvim và VIM trên Windows 7


11

Tôi muốn nhập các ngôn ngữ khác nhau bằng cách sử dụng (g) Vim. Nhưng khi tôi chuyển sang ngôn ngữ khác bằng thanh ngôn ngữ (ký tự Devanagari hoặc tiếng Hindi) và nhập bất cứ thứ gì, (g) vim sẽ hiển thị ??? ??.

Những gì tôi đã cố gắng:

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

Thông tin:

  • Phiên bản GVim: 7.4, và cả + multi_byte của nó.
  • Không có thay đổi trong tập tin vimrc mặc định.

Tôi mới bắt đầu với (g) vim.


5
Có thể là một điều phông chữ. Bạn đang sử dụng phông chữ nào?
muru

1
7 phông chữ (consolas, 2 chuyển phát nhanh, 2 lucida, fixedsys và terminal) được liệt kê trong gvim. Tôi đã thử tất cả chúng. Mặc dù hệ thống của tôi cũng có các phông chữ khác, nhưng gvim chỉ hiển thị 7. Tôi cũng đã làm theo: stackoverflow.com/questions/3766204/vim-doesnt-support-unicode nhưng vẫn không gặp may.
msinfo

3
"Một ngôn ngữ khác" là khá mơ hồ. Ngôn ngữ nào? Đánh bóng? Tiếng Do Thái? Người Trung Quốc? Klingon? Nếu bạn đang sử dụng một ngôn ngữ tối nghĩa thì rất có thể không có phông chữ nào hỗ trợ ngôn ngữ đó.
Martin Tournoij 3/03/2016

1
Trong trường hợp của tôi, tôi đang thử Malayalam với GVim 7.4.800 (hoặc ở đâu đó) với phông chữ Ubuntu Mono . Đối với văn bản mẫu, xem Wikipedia Malayalam . Trên Linux (Ubuntu và Arch), với các thiết bị đầu cuối và phông chữ GVim được đặt thành Ubuntu Mono, Malayalam sẽ hiển thị, ngay cả khi nó hơi bị cắt xén. Tôi đã thử các phông chữ khác mà msinfo đã đề cập trong bình luận thứ hai.
muru

1
Trên Linux, gvim có thể hiển thị các ký tự bạn muốn vì Pango sẽ lấy glyphs từ các phông chữ khác để có thể hiển thị tất cả các ký tự. Đó cũng là lý do tại sao các nhân vật trông khác với phần còn lại của văn bản của bạn. Nếu bạn thử điều tương tự trong xterm, thì bạn sẽ không thấy tất cả các ký tự vì một phông chữ duy nhất được sử dụng. Tôi nghi ngờ điều gì đó tương tự đang xảy ra trên Windows.
jamessan

Câu trả lời:


5

Mã hóa mặc định dường như là latin1:

:set encoding?
  encoding=latin1

Khi nhập các ký tự, Vim cố gắng chuyển đổi chúng từ bộ ký tự đến (có thể là unicode) sang latin-1. Điều này thất bại vì latin-1 không có các ký tự này. Do đó các dấu hỏi.

Mở một tệp hiện có (Được lưu bằng notepad hoặc một số chương trình khác) sẽ dẫn đến văn bản bị cắt xén vì hiện tại Vim chỉ đang cố đọc byte và giải thích chúng theo bộ ký tự latin-1, và không chuyển đổi chúng thành bộ Latin-1.

Bạn sẽ muốn sử dụng utf-8hoặc một số như vậy:

:set encoding=utf-8

Sau đó, kịch bản Malayalam dường như hoạt động.

Lưu ý rằng điều này sẽ không làm cho các dấu hỏi có sẵn hoạt động. Chúng thực sự được chuyển đổi thành dấu hỏi (ký tự 0x3f) trên đầu vào. Không có cách nào để lấy lại những gì đã nhập. Tôi nghi ngờ rằng đây là nguồn gốc của sự nhầm lẫn của câu hỏi này.

Cũng thấy :help 'encoding'.

Là một sidenote, glyphs không được hỗ trợ trong phông chữ thường được hiển thị với một glyph riêng biệt; điều này thay đổi trên mỗi phông chữ, nhưng thường là một khối vuông hoặc một dấu hỏi theo kiểu khác. bạn có thể thấy sự khác biệt giữa dấu hỏi "thực" và glyph không được hỗ trợ g8, sẽ hiển thị mã ký tự.


1
Tôi cần gõ các ký tự Devanagari hoặc Hindi. Mã hóa trước đây được đặt thành latin1, nó đã được thay đổi theo đề xuất của bạn thành utf-8. Nhưng vẫn không có nhân vật Devanagari hoặc Hindi được nhìn thấy. Nhưng khi tôi sao chép các hộp đó (như được hiển thị bởi VIM), từ VIM sang trình duyệt hoặc Notepad ++, chúng trông giống như các ký tự Unicode. Vì vậy, VIM nhận ra, nhưng không thể hiển thị chúng.
msinfo

1
@msinfo Bạn đang sử dụng phiên bản Vim nào? Bạn đã đề cập đến 7.4, nhưng không đề cập đến mức độ bản vá? Tôi đã sử dụng 7.4.1024 từ vim.org .
Martin Tournoij

1
Có vẻ như chưa được vá, vì tôi đã cố gắng tìm hiểu từ một trong những câu trả lời của bạn ;-) trên vi.stackexchange.com/questions/2466/ . Vim --version không hiển thị bất kỳ thông tin bản vá. Tôi chưa thực hiện bất kỳ thay đổi plugin hoặc vá, sau khi cài đặt.
msinfo

4
@msinfo Vim 7.4 đã được phát hành gần hai năm rưỡi trước. Hãy thử cài đặt phiên bản mới hơn. Có lẽ đó là tất cả những gì cần thiết?
Martin Tournoij
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.