偶然的原因,认识了GDI++字体渲染,据说可以让windows下的字体效果变得类似Mac下一样。使用一段时间后就爱上了它,总之,视觉效果比开启了ClearType的windows字体渲染也要好很多。
奈何gvim似乎有点水土不服,既不支持非等宽字体(比如著名的雅黑),而且GDI++的渲染似乎也是只在菜单生效,效果图如下
注:字体均为Dejavu_Sans_Mono,配色方案wombat256,相关配置文件如下
1 2 | set guifont=Dejavu_Sans_Mono:h11:cANSI
colorscheme wombat256
|
图1 默认的gvim7.3,未开启GDI++渲染
图2 默认的gvim 7.3,打开GDI++渲染后,只有菜单生效
图3 重新编译后的gvim 7.3,GDI++渲染完全生效
windows下使用VS2008重新编译Vim7.3的流程:
- 从 http://mercurial./downloads/ 下载安装mercurial,因为需要它才能从google code获取VIM的源代码
- 下载vim的源代码,按照 http://www./mercurial.php 的指南,相关命令(需要为hg.exe设置环境变量PATH)如下,假定当前目录是 VS2008,则vim的源代码会下载到 \VS2008\vim\ 下
1 2 3 | hg clone https: //vim .googlecode.com /hg/ vim
hg pull
hg update
|
- 参考了善用佳软 “支持非等宽字体、屏幕取词的gvim v7.3” 一文,以及水木社区VIM版对屏幕取词和重新编译的相关讨论,修改 \VS2008\vim\src\gui_w32.c 下font renderer相关内容,这样GDI++渲染就可以完全生效,即注释掉os_version.dwPlatformId相关的两行代码:
1 2 3 4 5 6 7 8 | /* On NT, tell the font renderer not to "help" us with Hebrew and Arabic
* text. This doesn't work in 9x, so we have to deal with it manually on
* those systems. */
/* bucunzai: font renderer */
/*
if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
foptions |= ETO_IGNORELANGUAGE;
*/
|
- 准备编译所需的环境,即:执行 开始菜单\Microsoft Visual Studio 2008\Visual Studio Tools\Visual Studio 2008命令行提示(即VS2008安装目录下\VC\vcvarsall.bat) 或 vim源代码目录下的 \VS2008\vim\src\msvc2008.bat (多用心,这都准备好了-_-#)。当然,这之前你得装了VS2008。
- 在src目录下执行编译巨型版本+带Python 2.6支持的批处理。其中第一行清理之前生成的文件(如果有的话)。批处理文件如下
1 2 | nmake -f Make_mvc.mak clean
nmake -f Make_mvc.mak GUI= yes OLE= yes PYTHON=c:\python26 DYNAMIC_PYTHON= yes PYTHON_VER=26 IME= yes GIME= yes DYNAMIC_IME= yes GDYNAMIC_IME= yes CSCOPE= yes MULTI_BYTE= yes MULTI_BYTE_IME= yes USERNAME=bucunzai USERDOMAIN=testing FEATURES=HUGE
|
如有需要,可以参考源代码目录下 \VS2008\vim\src\bigvim.bat (重新编译支持Perl/Python/Ruby/Tcl的批处理文件)以及 http://code.google.com/p/jff/source/browse/trunk/XDE/xde/vim/doVC.bat (用于自动编译VIM的批处理)增加相应的选择,以便支持Perl/Ruby/Tcl/Python3等。
- 不知道为什么,USERNAME和USERDOMAIN选项好像没生效,最后生成的gvim.exe显示的编译者是当前windows的用户名@计算机名,如有需要,可以修改 \VS2008\vim\src\ObjGOY\pathdef.c 最后两行,改为自己喜欢的自定义昵称
1 2 | char_u *compiled_user = (char_u *) "bucunzai" ;
char_u *compiled_sys = (char_u *) "testing" ;
|
- 在src目录下的 gvim.exe 就是在windows下重新编译的支持GDI++渲染,并且也应该支持金山词霸取词(未验证,我没装),带目前7.3的1-32个补丁,其他语言支持只带Python2.6,未加入Perl/Ruby/Tcl/Python3等。
- 下载见最后,用 :version 看下版本

重新编译后的gvim 7.3下载: gvim 7.3 20101021
带md5验证 8416f911cbba02e7b2b02d46228c5781 *gvim.exe
2010年10月28日更新
重新编译的 gvim 7.3.047下载: gvim73_47
md5验证 34e95349b474f41fae9a1486832c0165 *gvim.exe
2010年11月01日更新
根据3中提到的修改os_mswin.c,也是注释掉一行代码,使gvim可以支持非等宽字体(比如微软雅黑)。因为windows自身的编码是cp936,而使用非等宽字体需要设置编码为utf-8,因此菜单会乱码。修改了部分在vimrc中的相关配置,第一部分设置帮助语言为中文,同时设置菜单为英文,终端提示为中文;第二部分修改编码;最后设置英文字体为Dejavu_Sans_Mono,中文字体为微软雅黑。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | if has( "win32" )
set helplang=cn " help language = cn!
source $VIMRUNTIME /delmenu .vim
set langmenu=en_US
source $VIMRUNTIME /menu .vim
language messages zh_CN.utf-8
endif
if has( "multi_byte" )
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
endif
set guifont=Dejavu_Sans_Mono:h11:cANSI
set guifontwide=Microsoft_YaHei:h11
|
看看此时的字体效果,顺便看下版本:
重新编译的支持非等宽字体/支持屏幕取词/支持GDI++渲染的gvim 7.3.047下载: gvim73_47_non_mono
MD5验证: f2aee45be349c6207c0b79293da97ea3 *gvim.exe
2011年4月2日更新
从google code更新了一下(hg pull && hg up),重新运行一遍批处理,gvim 7.3.152下载:gvim73_152_non_mono
MD5验证:4f98f2e50042988268ccc35a873b44e8 *gvim.exe
|