LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1031|回复: 7

[已解决]WIN32下GVIM的全角中文符号问题

[复制链接]
发表于 2005-12-16 01:34:44 | 显示全部楼层 |阅读模式
这个问题似乎跟字体有关,set ambiwidth=double解决。
有点奇怪,网上几乎没有该问题的描述,即使用ambiwidth作keyword搜索,也只有两三篇中文文档提到了这个问题。

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

以下为原始问题:
---------------------------------------------------------------------

gvim在windows里显示中文全角的引号“”有问题,会把这两个字符当成半角显示。在论坛和网上找了很多地方,都没找到有关这个问题的描述和解释,请问有人知道这个问题是怎么搞的,能解决么?
谢谢~
发表于 2005-12-16 08:03:54 | 显示全部楼层
没发生过此问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-17 07:02:46 | 显示全部楼层
这是我刚抓的图,第一行8个字符作标尺
第二行应该是:一“三”五

要是没有这个问题,抓装图上来看看
回复 支持 反对

使用道具 举报

发表于 2005-12-17 11:00:48 | 显示全部楼层
楼主gvim的版本?
回复 支持 反对

使用道具 举报

发表于 2005-12-17 12:22:27 | 显示全部楼层
没有看到图片

我自己试了一下,写:
一“三”五
没有问题

楼主的GVIM字体是什么?
回复 支持 反对

使用道具 举报

发表于 2005-12-17 13:37:16 | 显示全部楼层
记得6.3(不含)以前的版本有这个bug的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-17 13:43:26 | 显示全部楼层
去翻vim的源码,似乎是找到问题所在了。

当set encoding=chinese的时候,引号显示正常,但set encoding=utf8的时候则不正常。
vim似乎是根据一个叫mb_bytelen_tab的数组来判断字符宽度的。
在win32平台下,且enc=chinese时,mb_bytelen_tab使用IsDBCSLeadByteEx函数填充,msdn上说这个函数判断一个字节是否为一个双字节字符的起始字节。
enc=utf8时,使用一个预定义的utf8len_tab数组对mb_bytelen_tab进行填充。

引号的utf8编码是0x1c20和0x1d20,我试了试,把utf8len_tab的相关元素改成2,但似乎没有作用的样子。问题还是没有解决,还在找解决的办法。

附件是enc=utf8时出问题的引号

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-17 16:38:29 | 显示全部楼层
yahoo groups中搜到的相关贴:
http://groups.yahoo.com/group/vim-multibyte/message/641
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表