Как просмотреть символы UTF-8 в VIM или Gvim


107

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

Использование VIM 7.3.46 в 64-разрядной версии Windows 7 с 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 Нет. Я сдался: |
Сатиш Манохар

Моя проблема заключалась в том, что inconsolata-g не поддерживает символы utf-8 в моем документе.
AndrewPK

Использование set guifontwide=NSimsun:h12для меня "сбой", говорит "Недопустимый широкий шрифт", вероятно, та же проблема с немоноширинным шрифтом?
mikew 04

Ответы:


62

Попробуйте перезагрузить документ, используя:

:e! ++enc=utf8

Если это сработает, возможно, вам следует изменить fileencodingsнастройки в вашем .vimrc.


2
Для меня ничего не меняет
Томас Левеск

8
НЕ запускайте это перед сохранением вашей работы, так как это сотрет сделанные вами изменения. :uхотя спасет вас.

Кроме того, когда вы это делаете, файл устанавливается только для чтения, поэтому вам также необходимо затем запустить:set noro
Мэтт Вукоманович

2
Спасибо за это. В моем случае Vim не отображал utf-8, потому что у меня был блок двоичных данных (часть прикрепления multipart / form-data). Когда я это сделал :e! ++enc=utf8, он отобразил utf-8, но пожаловался [ILLEGAL BYTE in line 286](первая строка двоичной части) внутри файла. Я предполагаю, что поведение по умолчанию - молча вернуться к какой-то другой кодировке, когда это происходит при открытии Vim. Однако по какой-то причине echo &encв этом случае все еще сообщает utf-8.
Дмитрий Миньковский

1
@DmitryMinkovsky &enc- это кодировка, которую vim использует внутри для хранения содержимого буфера. Настройка, которая содержит кодировку для текущего файла,&fenc
Бенуа

61

Ты пробовал

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

?


5
Я пробовал использовать обе эти настройки, но все еще не вижу символов utf-8.
Сатиш Манохар 02

1
-1. На самом деле это не может работать. Ни один из этих вариантов не приведет к перезагрузке файла. Первый изменит то, как vim хранит буферы (и другие вещи) внутри, второй укажет, что вы хотите изменить кодировку файла, который уже загружен в буфер, который будет применяться при его сохранении.
Benoit

:set encoding=utf8 БУДЕТ обновлять буфер и, если проблема была в неправильной кодировке, исправит ее. Я добавил set fileencoding=utf8опцию, чтобы вы не столкнулись с самой запутанной ошибкой «Не могу преобразовать какой-то символ» при сохранении.
Максим Слойко 04

установленная кодировка сработала. Я добавил set encoding = utf8 в файл .vimrc, и теперь с utf8 все в порядке.
Александр Ким

В OSX я добавил эти две строки (без двоеточий) в свой, ~/.vimrcи все
заработало

8

Если сюда приезжают японцы, добавьте в свой ~/.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. Загрузите fontforge, выберите latha.ttf.
  2. Меню: Элемент -> Информация о шрифте
  3. Выберите «OS / 2» из списка слева в диалоговом окне «Информация о шрифте».
  4. Выберите вкладку "Панорама".
  5. Установить пропорцию = моноширинный
  6. Сохраните новую TTF-версию этого шрифта, попробуйте!

Удачи!


1
Я не мог изменить шрифт latha на моноширинный. Я точно выполнил ваши шаги, но сохраненный файл по-прежнему не работает как моноширинный шрифт :(
Sathish Manohar

1
@Sathish Manohar 1) перезапишите существующий файл TTF, перезапустите Windows и попробуйте. или 2) вы можете сохранить TTF в новый файл и изменить имя шрифта. Установите новый файл TTF. Этот новый шрифт должен быть доступен в вашем списке.
И Чжао

Спустя столько лет (7 лет) для VIM доступно несколько бесплатных шрифтов. Шрифты Google Noto google.com/get/noto ; и Iosveka github.com/be5invis/Iosevka/releases - очень хорошие альтернативы для оценки.
И Чжао

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 отображал не все символы Юникода (а только подмножество, включая умляуты и символы с диакритическими знаками), пока он :set guifont?был пустым; см. мой вопрос . После прочтения здесь установка guifontразумного значения исправила это для меня. Однако мне не нужны символы, превышающие 2 байта.


1
Какая разумная ценность для Guifont? Что ты вставил?
Christian

В этом ответе я перечислил те ценности, которые у меня сработали .
Тобиас

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 ... в GVim) со шрифтом Consolas, чтобы правильно отображать текстовый файл в кодировке UTF-8 с греческими символами
hello_earth


0

это работает для меня и не нужно изменять какой-либо файл конфигурации

vim --cmd "set encoding=utf8" --cmd "set fileencoding=utf8" fileToOpen

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.