gvim中文字符显示不全问题(显示为一个字母宽度)

作者:半瓶墨水 链接:http://www.2maomao.com/blog/gvim-chinese-symbol-issue/

GVIM是我最喜欢的编辑软件,我写过许多与vim相关的文章

有一个问题困扰我很久,一直都没有解决:vim在线式中文字符的时候是按照半角显示的,所以看起来和汉字会有重叠
我试过设置fileencoding、language等等,都没用,搜索了几次都没有找到结果
由于这个问题也不是很重要,我后来就没有找了

今天不知道搜啥的时候,居然让我瞥到了解决方案,很简单:

set ambiwidth=double

其中注册会员800指出了为什么会这样:

这个问题似乎跟字体有关,set ambiwidth=double解决。
有点奇怪,网上几乎没有该问题的描述,即使用ambiwidth作keyword搜索,也只有两三篇中文文档提到了这个问题。

有兴趣知道为什么的请看源码,mbyte.c中的utf_char2cells函数。
p_ambw在option.h中定义,即ambiwidth。

网络真好,如果没有网络,这个问题估计也就一直带到老了

  • Share/Bookmark

1 Tweet

共 8 条评论

  • RedNax 三月 3rd, 2009 9:14 上午

原来如此,我以前也遇到过不过没有关注(也是觉得只是小问题,说实话gvim这里那里的小问题还是不少的,我也找过两个给Bram :)。原来只要设置这个就可以解决了。中文文档中有关ambiwidth的内容:

‘ambiwidth’ ‘ambw’ 字符串 (缺省: “single”)
全局
{Vi 无此功能}
{仅当编译时加入 |+multi_byte| 特性才有效}
只有在 ‘encoding’ 为 “utf-8″ 或别的 Unicode 编码时才有效。告诉 Vim 怎
么处理东亚二义性宽度字符类 (East Asian Width Class Ambiguous) (例如
欧元符号、注册记号、版权记号、希腊字母、西里尔字母等等)。

目前有两个可能的选择:
“single”: 使用和 US-ASCII 字符相同的宽度。多数用户希望如此。
“double”: 使用 US-ASCII 字符两倍的宽度。

在一些 CJK 字体里,这些字符的字形宽度完全由它们在传统的 CJK 编码里占据
字节的数目决定。那些编码中,欧元、注册记号、希腊/西里尔字母等占据两个
字节,因而它们在这些字体里用 “宽” 字形显示。这也包括文本文件里制表用的
一些画线字符。因此如果 GUI Vim 使用 CJK 字体、或者在使用 CJK 字体的终
端 (模拟器) (包括带有 “-cjkwidth” 选项的 xterm) 里运行 Vim,应把该选项
设为 “double”,这样可以匹配这些字体里 Vim 实际看到相关字形的宽度。 CJK
Windows 9x/ME 或 Windows 2k/XP 上,如果系统 locale 为 CJK locale,也应
把本选项设为 “double”。见 Unicode Standard Annex #11
(http://www.unicode.org/reports/tr11)。

  • 晓月 三月 3rd, 2009 1:41 下午

嗯,非常感谢~

  • 歪脖 三月 5th, 2009 7:09 下午

偶也一直在windows用gvim,好像没觉得汉字显示有什么问题。还因为偶的ambiwidth选项设对double,结果一看也是single。
不知道,楼主说的“汉字重叠”是什么样的问题,能不能贴个图什么的

@歪脖
你把下面这句话复制到你的vim里面,包含符号:
输几个☆★♢□■试试看

  • 歪脖 三月 6th, 2009 10:02 上午

啊,原来如此。偶的缺省encoding是cp936,所以ambiwidth选项不起作用。输入你给出的符号也没有啥大问题,就是那个菱形显示成问号。如果encoding改成utf8果然就看到重叠了,难为楼主一直在这样的显示效果下坚持使用gvim了。

anyway,长了见识,谢谢了。

@歪脖 很好如果你做网页服务端开发的话,utf8选项几乎是必须的

  • realfun 三月 12th, 2009 5:03 下午

gvim中文字符显示不全问题(显示为一个字母宽度) http://tinyurl.com/c7o5p9

This comment was originally posted on Twitter

  • 毛毛 三月 17th, 2009 11:32 下午

非常感谢你的方法,我是个新手,刚刚发现的这个问题

发表评论

  • :l
  • :)
  • :q
  • :(
  • :^
  • :x
  • :v
  • :D
  • :s
  • :h
  • :e
  • :X
  • :k
  • :w
  • :d
  • :p

注意:评论中需包含至少一个中文字,否则视为无效

Additional comments powered by BackType