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。
网络真好,如果没有网络,这个问题估计也就一直带到老了
共 8 条评论
发表评论
Additional comments powered by BackType



原来如此,我以前也遇到过不过没有关注(也是觉得只是小问题,说实话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)。
嗯,非常感谢~
偶也一直在windows用gvim,好像没觉得汉字显示有什么问题。还因为偶的ambiwidth选项设对double,结果一看也是single。
不知道,楼主说的“汉字重叠”是什么样的问题,能不能贴个图什么的
@歪脖
你把下面这句话复制到你的vim里面,包含符号:
输几个☆★♢□■试试看
啊,原来如此。偶的缺省encoding是cp936,所以ambiwidth选项不起作用。输入你给出的符号也没有啥大问题,就是那个菱形显示成问号。如果encoding改成utf8果然就看到重叠了,难为楼主一直在这样的显示效果下坚持使用gvim了。
anyway,长了见识,谢谢了。
@歪脖 很好如果你做网页服务端开发的话,utf8选项几乎是必须的
gvim中文字符显示不全问题(显示为一个字母宽度) http://tinyurl.com/c7o5p9
This comment was originally posted on Twitter
非常感谢你的方法,我是个新手,刚刚发现的这个问题