关于更适合中文用户、更适合非编程用户的vim的讨论(1、2)终于取得了一点实质性结果:支持非等款字体、支持金山词霸、有道词典取词的 windows gvim.exe v7.3 终于出现了。感谢 Dieken、湖间小筑的技术研究、动手制作。
一、gvim的屏幕取词
问题描述:
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支持非等款字体
说明一: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)>