Як переглянути символи UTF-8 у форматі VIM або Gvim


106

Я працюю над веб-сторінками, які періодично використовують неанглійські скрипти, більшість з них використовує charf utf-8, VIM, а Gvim не відображає символів UTF-8 правильно.

Використання VIM 7.3.46 для Windows 7 64 біт, з set guifont=Monaco:h10_vimrc

Чи є спосіб це виправити?

Оновлення: я поглянув навколо і виявив, що 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 працює для китайської мови. Проблема в тому, що я не знаю, як вони отримали назву шрифту для роботи з VIM, Courier Newзгадується, як Courier_Newі NSimsunніде в каталозі шрифтів. Я хочу використовувати шрифт, Lathaале я не знаю, як його використовувати у файлі _vimrc. set guifontwide=latha:h12або set guifontwide=Latha:h12не працює.

Якщо я успішно встановити guifontwideдо latha, то моя проблема буде вирішена, як це зробити?


що таке значення 'guifont'і значення 'guifontwide'? Крім того, яку ОС ви використовуєте та яку версію vim?
Бенуа

Сатіш, чи вдалося вам знайти якесь рішення для цього? Я намагаюся набрати gVim з програмним забезпеченням eKalappai, але vim показує мені лише ?? символи (мабуть, збереження їх однаковим чином).
sundar

@sundar No. Я здався: |
Сатіш Манохар

Моя проблема полягала в тому, що inconsolata-g не підтримує символів utf-8 у моєму документі.
AndrewPK

Використовуючи set guifontwide=NSimsun:h12помилки для мене, каже, що "Недійсний широкий шрифт", мабуть, той самий немонопростір?
mikew

Відповіді:


61

Спробуйте перезавантажити документ, використовуючи:

: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 у цьому випадку.
Дмитро Міньковський

1
@DmitryMinkovsky, &encце vim кодування, який використовується внутрішньо для зберігання вмісту буфера. Налаштування, що містить кодування для поточного файлу,&fenc
Бенуа

60

Ви спробували

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

?


5
Я намагався з обома цими налаштуваннями, і досі не можу бачити utf-8 символів.
Сатіш Манохар

1
-1. Насправді це не може працювати. Жоден із цих параметрів не завантажить файл. Перший модифікує, як vim зберігає буфери (та інші речі) внутрішньо, другий вказує, що ви хочете змінити кодування файлу, який уже завантажений у буфер, і застосовуватиметься під час його збереження.
Бенуа

:set encoding=utf8 БУДЕ оновити буфер, і якщо проблема була в неправильному кодуванні, вона виправить це. Я додав set fileencoding=utf8варіант, щоб ви не стикалися з найбільш заплутаною помилкою "Неможливо перетворити якийсь символ" під час збереження.
Максим Слойко

набір кодування працював. Я додав набір. Encr = utf8 до .vimrc-файлу, і тепер з utf8 все нормально.
Олександр Кім

На OSX я додав ці два рядки (без колонок) до своїх, ~/.vimrcі вони спрацювали чудово
lionello

7

Якщо японці приїдуть сюди, будь-ласка, додайте наступні рядки до свого ~/.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 з http://www.geocities.jp/meir000/fontforge/ ) для редагування Latha.ttf і позначте його як однобічний шрифт. Робити так:

  1. Завантажте шрифт для вибору, виберіть latha.ttf.
  2. Меню: Елемент -> Інформація про шрифт
  3. Виберіть "OS / 2" зі списку зліва на панелі "Інформація про шрифт"
  4. Виберіть вкладку "Панорування"
  5. Встановити пропорцію = Монорозмір
  6. Збережіть нову версію цього шрифту TTF, спробуйте!

Удачі!


1
Я не зміг змінити шрифт Latha на монопростір. Я точно дотримувався ваших кроків, але збережений файл все ще не працює як односхилий шрифт :(
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? Що ти поставив?
Крістіан

Я перерахував значення, які працювали на мене у цій відповіді .
Тобіас

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 (Edit -> Select Font ... in GVim) із шрифтом Consolas, щоб правильно відобразити закодований текстовий файл UTF-8 із грецькими символами
hello_earth

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.