分享

windows下重新编译Vim7.3(支持GDI++渲染) | 不存在的日志

 Rainboy913 2013-12-07

偶然的原因,认识了GDI++字体渲染,据说可以让windows下的字体效果变得类似Mac下一样。使用一段时间后就爱上了它,总之,视觉效果比开启了ClearType的windows字体渲染也要好很多。

奈何gvim似乎有点水土不服,既不支持非等宽字体(比如著名的雅黑),而且GDI++的渲染似乎也是只在菜单生效,效果图如下

注:字体均为Dejavu_Sans_Mono,配色方案wombat256,相关配置文件如下

1
2
set guifont=Dejavu_Sans_Mono:h11:cANSI
colorscheme wombat256

未开启GDI++的vim7.3图1 默认的gvim7.3,未开启GDI++渲染

默认的gvim7.3,打开gdi++渲染图2 默认的gvim 7.3,打开GDI++渲染后,只有菜单生效

重新编译后的gvim 7.3,开启gdi++渲染图3 重新编译后的gvim 7.3,GDI++渲染完全生效

windows下使用VS2008重新编译Vim7.3的流程:

  1. http://mercurial./downloads/ 下载安装mercurial,因为需要它才能从google code获取VIM的源代码
  2. 下载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
  3. 参考了善用佳软 “支持非等宽字体、屏幕取词的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;
    */
  4. 准备编译所需的环境,即:执行 开始菜单\Microsoft Visual Studio 2008\Visual Studio Tools\Visual Studio 2008命令行提示(即VS2008安装目录下\VC\vcvarsall.bat) vim源代码目录下的 \VS2008\vim\src\msvc2008.bat (多用心,这都准备好了-_-#)。当然,这之前你得装了VS2008。
  5. 在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等。

  6. 不知道为什么,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";
  7. 在src目录下的 gvim.exe 就是在windows下重新编译的支持GDI++渲染,并且也应该支持金山词霸取词(未验证,我没装),带目前7.3的1-32个补丁,其他语言支持只带Python2.6,未加入Perl/Ruby/Tcl/Python3等。
  8. 下载见最后,用 :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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多