Не вдається ввести Unicode з Gvim та VIM у Windows 7


11

Я хочу ввести різні мови, використовуючи (g) Vim. Але коли я переходжу на іншу мову за допомогою мовної панелі (символи Devanagari або Hindi), і ввожу що-небудь, (g) відображається vim ??? ??.

Що я спробував:

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

Інформація:

  • Версія GVim: 7.4, а також його + багатобайтовий.
  • Немає змін у файлі vimrc за замовчуванням.

Я щойно почав з (g) vim.


5
Це може бути шрифт. Який шрифт ви використовуєте?
муру

1
7 шрифтів (консолі, 2 кур'єра, 2 lucida, fixsys та terminal) перелічені у 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 просто намагається читати байти та інтерпретувати їх відповідно до набору символів латині-1, а не конвертувати їх у набір latin-1.

Ви хочете використовувати utf-8або щось таке:

:set encoding=utf-8

Після цього сценарій малаялам, здається, працює.

Зауважте, що це не призведе до роботи попередніх знаків запитання. Вони дійсно є перетворені в знаки питання (символи 0x3f) на вході. Немає можливості повернути те, що було введено. Я підозрюю, що це джерело плутанини цього питання.

Також див :help 'encoding'.

Як сторонне позначення, непідтримувані гліфи у шрифті зазвичай надаються з чітким гліфом; це залежить від шрифту, але зазвичай це квадратний блок або інший стильовий знак питання. ви можете побачити різницю між "реальним" знаком питання та непідтримуваним гліфом g8, який покаже код символу.


1
Мені потрібно набрати символи Devanagari або Hindi. Раніше кодування було встановлено на latin1, воно було змінено відповідно до вашої пропозиції на utf-8. Але досі не видно символів Devanagari або Hindi. Але коли я копіюю ці поля (як надано VIM), з VIM в браузер або Notepad ++, вони виглядають як символи Unicode. Отже 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 вийшов майже два з половиною роки тому. Спробуйте встановити нову версію. Може, це все, що потрібно?
Мартін Турноїй
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.