Не удается набрать 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) vim.

MSInfo
источник
5
Может быть, шрифт. Какой шрифт вы используете?
Муру
1
7 шрифтов (consolas, 2 courier, 2 lucida, fixedsys и терминал) перечислены в gvim. Я перепробовал их все. Хотя в моей системе есть и другие шрифты, но gvim отображает только 7. Я также следовал: stackoverflow.com/questions/3766204/vim-doesnt-support-unicode, но все равно не повезло.
msinfo
3
«Другой язык» довольно расплывчатый. Какой язык? Польский? Иврит? Китайский? Клингон? Если вы используете неясный язык, вполне возможно, что ни один из этих шрифтов не поддерживает этот язык.
Мартин Турной
1
В моем случае я пробую малаялам с GVim 7.4.800 (или около того) шрифтом Ubuntu Mono . Образец текста см. В Википедии на малаялам . В Linux (Ubuntu и Arch), когда для терминала и шрифтов GVim установлено значение Ubuntu Mono, малаялам действительно появляется, даже если он слегка сжат. Я пробовал другие шрифты msinfo, упомянутые во втором комментарии.
Муру
1
В Linux gvim может отображать символы, которые вы хотите, потому что Pango будет извлекать глифы из других шрифтов, чтобы иметь возможность отображать все символы. Вот почему символы выглядят иначе, чем остальная часть вашего текста. Если вы попробуете то же самое в xterm, вы не увидите все символы, потому что используется один шрифт. Я подозреваю, что нечто подобное происходит в Windows.
Jamessan

Ответы:

5

Кодировка по умолчанию выглядит так latin1:

:set encoding?
  encoding=latin1

При вводе символов Vim пытается преобразовать их из входящего набора символов (возможно, в Unicode) в латиницу-1. Это терпит неудачу, так как латинский-1 не имеет этих символов. Отсюда и вопросительные знаки.

Открытие существующего файла (сохраненного с помощью блокнота или другой программы) должно привести к искаженному тексту, поскольку теперь Vim просто пытается прочитать байты и интерпретировать их в соответствии с набором символов latin-1, а не преобразовывать их в набор символов latin-1.

Вы хотите использовать utf-8или некоторые такие:

:set encoding=utf-8

После чего сценарий малаялам, кажется, работает.

Обратите внимание, что это не заставит работать уже существующие вопросительные знаки. Они действительно являются преобразованы в вопросительные знаки (символы 0x3f) на входе. Там нет никакого способа вернуть то, что было введено. Я подозреваю, что это является источником путаницы в этом вопросе.

Также см :help 'encoding'.

Как примечание, неподдерживаемые глифы в шрифте обычно отображаются с отличным глифом; это зависит от шрифта, но обычно это квадратный блок или другой стиль вопросительного знака. Вы можете увидеть разницу между «реальным» вопросительным знаком и неподдерживаемым глифом g8, который покажет код символа.

Мартин Турной
источник
1
Мне нужно ввести символы деванагари или хинди. Кодировка ранее была установлена ​​на latin1, она была изменена согласно вашему предложению на utf-8. Но все еще никакие символы деванагари или хинди не видны. Но когда я копирую эти блоки (отображаемые VIM) из VIM в браузер или Notepad ++, они выглядят как символы Юникода. Поэтому VIM распознает, но не может их отобразить.
msinfo
1
@msinfo Какую версию Vim вы используете? Вы упомянули 7.4, но не упомянули уровень патча? Я использовал 7.4.1024 с vim.org .
Мартин Турной
1
Кажется, это не исправлено, как я пытался выяснить из одного из ваших ответов ;-) на vi.stackexchange.com/questions/2466/… . Vim --version не показывает информацию о патче. Я не сделал никаких изменений плагинов или патчей после установки.
msinfo
4
@msinfo Vim 7.4 был выпущен почти два с половиной года назад. Попробуйте установить более новую версию. Может это все что нужно?
Мартин Турной