title: "支持非等宽字体、屏幕取词的gvim v7.3"
date: 2010-09-19
tags:
- "gvim"
支持非等宽字体、屏幕取词的gvim v7.3
关于更适合中文用户、更适合非编程用户的vim的讨论(1、2)终于取得了一点实质性结果:支持非等款字体、支持金山词霸、有道词典取词的 windows gvim.exe v7.3 终于出现了。感谢 Dieken、湖间小筑的技术研究、动手制作。
问题描述: Windows下,金山词霸、有道词典启用屏幕取词功能,但在gvim窗口中无法取词,或不能准确地取出完整单词。 原因分析: 程序沟通问题。 跨平台、跨语言的gvim考虑了更复杂的情况(但没有区分):并非所有文字都是从左向右阅读,某些语言会从右向左,如阿拉伯语等。而金山词霸、有道未充分考虑此情况。
Dieken @ newsmth,2007-01-29, via
gvim 7.0.188 版本 gui_w32.c:gui_mch_draw_string():2255 这两行判断太严格了: if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) foptions |= ETO_IGNORELANGUAGE;
这个是为了 Hebrew 和 Arabic 文本加的,但是并没有加这个的判断, 我用 if ( #ifdef FEAT_RIGHTLEFT curwin->w_p_rl && #endif os_version.dwPlatformId == VER_PLATFORM_WIN32_NT) foptions |= ETO_IGNORELANGUAGE; 实验了一下,在有两个窗口,一个没有设置 rightleft,一个设置了rightleft,当光标处于后者时,还是不能取词,需要光标挪到没有设置 rightleft 的窗口内才行,这个问题还不知道怎么改,交给邮件列表处理。
对于大多数人来说,不会用到 rightleft 特性,所以可以直接把那两句注释掉,然后就可以正常取词了。
说明一:gvim 并非不能支持非等宽字体,而是在编译时,默认忽略了非等宽字体(Ignore non-monospace fonts without further ado)。在多个平台中,gtk2下的gvim是默认支持非等宽字体的,其他平台默认不支持。
说明二:无论字体是否等宽,vim都会重新对齐。即显示效果仍然是等宽的。因此,『支持非等宽字体』的gvim,可以换用更丰富的字体,并不可以得到非等宽效果。
解决办法一:非等宽字体编译时加 -DFEAT_PROPORTIONAL_FONTS 就可以了。make 的时候加一个参数。[via milksea @ newsmth](这2句话是同一回事吗?哪位帮助整理成更准确、书面语的表述?)
解决办法二:修改源代码,取消对非等宽字体的忽略。比如,在 os_mswin.c 中查找mono,会看到一处注释说忽略非等宽字体(Ignore non-monospace fonts without further ado),把下面一行注释掉即可。via
支持非等宽字体、支持屏幕取词的 gvim.exe v7.3 下载,及相关讨论,敬请访问 让win下的vim支持非等宽字体|湖间小筑
==== (完。初稿2007-01-23;更新2009-02-06;更新2009-05-07;更新2010-09-19)>