如何在VIM或Gvim中查看UTF-8字符


106

我有时会处理涉及非英语脚本的网页,其中大多数使用utf-8字符集,VIM和Gvim无法正确显示UTF-8字符。

在Windows 7 64位上使用set guifont=Monaco:h10_vimrc 使用VIM 7.3.46

有没有办法解决这个问题?

更新:我在Google周围搜索,发现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_NewNSimsun没有提到。我想使用的字体是Latha但是,我不知道如何在_vimrc文件中使用它。set guifontwide=latha:h12set guifontwide=Latha:h12不起作用。

如果我成功将设置guifontwidelatha,那么我的问题将得到解决,该怎么办?


什么是价值'guifont'和价值'guifontwide'?另外,您使用的是什么操作系统以及什么版本的vim?
Benoit

Sathish,您能够为此找到任何解决方案吗?我正在尝试使用eKalappai软件输入gVim,但vim仅向我显示?? 字符(显然以相同方式保存它们)。
sundar-恢复莫妮卡

@sundar号,我放弃了:|
Sathish Manohar,2013年

我的问题是inconsolata-g在我的文档中不支持utf-8字符。
AndrewPK

set guifontwide=NSimsun:h12对我来说使用失败,说“无效的宽字体”可能是同样的非等宽字体问题?
mikew 2015年

Answers:


61

尝试使用以下方法重新加载文档:

:e! ++enc=utf8

如果可行,您应该更改fileencodings.vimrc中的 设置。


2
对我没有任何改变
Thomas Levesque 2014年

8
在保存您的工作之前,请勿运行此命令,因为它会抹去您所做的更改。:u虽然会救你。

此外,这样做时会将文件设置为只读,因此您还需要运行:set noro
Matt Vukomanovic 16-10-11

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
Benoit

60

你试过了吗

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


5
我尝试了这两种设置,但仍然看不到utf-8字符。
Sathish Manohar'3

1
-1。实际上这是行不通的。这些选项都不会重新加载文件。第一个将修改vim在内部存储缓冲区(和其他内容)的方式,第二个将指定您希望更改已经加载到缓冲区中的文件的编码,该编码将在保存时应用。
Benoit

:set encoding=utf8 刷新缓冲区,如果问题是编码不正确,它将对其进行修复。我添加了set fileencoding=utf8选项,因此保存时不会遇到最令人困惑的“无法转换某些字符”错误。
Maxim Sloyko 2011年

设置编码有效。我将set encoding = 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(您可以从http://www.geocities.jp/meir000/fontforge/下载Windows二进制文件)来编辑Latha.ttf并将其标记为等宽字体。这样做:

  1. 加载fontforge,选择latha.ttf。
  2. 菜单:元素->字体信息
  3. 从“字体信息”对话框的左侧列表中选择“ OS / 2”
  4. 选择“ Panose”标签
  5. 设置比例=等距
  6. 保存此字体的新TTF版本,尝试一下!

祝好运!


1
我无法将latha字体更改为等宽字体。我完全按照您的步骤操作,但是保存的文件仍然不能以等宽字体显示:(
Sathish Manohar

1
@Sathish Manohar 1)覆盖现有的TTF文件,重新启动Windows,然后尝试。或2)您可以将TTF保存到新文件并修改字体名称。安装新的TTF文件。此新字体应在您的列表中可用。
Yi Yi

在所有这些年(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字符(而仅显示一个子集,包括变音符号和重音字符):set guifont?。看我的问题。在这里阅读后,将设置guifont为合理的值对我来说就是固定的。但是,我不需要超过2个字节的字符。


1
guifont的合理价值是什么?你放了什么
基督教徒

我列出了在此答案中对我有用的价值观。
Tobias

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字符。


在我的情况下,必须使用Consolas字体将cANSI更改为cGREEK(在GVim中编辑->选择字体...),以便正确显示带有希腊字符的UTF-8编码文本文件
hello_earth

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.