偶然的原因,認(rèn)識(shí)了GDI++字體渲染,據(jù)說可以讓windows下的字體效果變得類似Mac下一樣。使用一段時(shí)間后就愛上了它,總之,視覺效果比開啟了ClearType的windows字體渲染也要好很多。
奈何gvim似乎有點(diǎn)水土不服,既不支持非等寬字體(比如著名的雅黑),而且GDI++的渲染似乎也是只在菜單生效,效果圖如下
注:字體均為Dejavu_Sans_Mono,配色方案wombat256,相關(guān)配置文件如下
1 2 | set guifont=Dejavu_Sans_Mono:h11:cANSI
colorscheme wombat256
|
圖1 默認(rèn)的gvim7.3,未開啟GDI++渲染
圖2 默認(rèn)的gvim 7.3,打開GDI++渲染后,只有菜單生效
圖3 重新編譯后的gvim 7.3,GDI++渲染完全生效
windows下使用VS2008重新編譯Vim7.3的流程:
- 從 http://mercurial./downloads/ 下載安裝mercurial,因?yàn)樾枰拍軓膅oogle code獲取VIM的源代碼
- 下載vim的源代碼,按照 http://www./mercurial.php 的指南,相關(guān)命令(需要為hg.exe設(shè)置環(huán)境變量PATH)如下,假定當(dāng)前目錄是 VS2008,則vim的源代碼會(huì)下載到 \VS2008\vim\ 下
1 2 3 | hg clone https: //vim .googlecode.com /hg/ vim
hg pull
hg update
|
- 參考了善用佳軟 “支持非等寬字體、屏幕取詞的gvim v7.3” 一文,以及水木社區(qū)VIM版對(duì)屏幕取詞和重新編譯的相關(guān)討論,修改 \VS2008\vim\src\gui_w32.c 下font renderer相關(guān)內(nèi)容,這樣GDI++渲染就可以完全生效,即注釋掉os_version.dwPlatformId相關(guān)的兩行代碼:
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;
*/
|
- 準(zhǔn)備編譯所需的環(huán)境,即:執(zhí)行 開始菜單\Microsoft Visual Studio 2008\Visual Studio Tools\Visual Studio 2008命令行提示(即VS2008安裝目錄下\VC\vcvarsall.bat) 或 vim源代碼目錄下的 \VS2008\vim\src\msvc2008.bat (多用心,這都準(zhǔn)備好了-_-#)。當(dāng)然,這之前你得裝了VS2008。
- 在src目錄下執(zhí)行編譯巨型版本+帶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 (用于自動(dòng)編譯VIM的批處理)增加相應(yīng)的選擇,以便支持Perl/Ruby/Tcl/Python3等。
- 不知道為什么,USERNAME和USERDOMAIN選項(xiàng)好像沒生效,最后生成的gvim.exe顯示的編譯者是當(dāng)前windows的用戶名@計(jì)算機(jī)名,如有需要,可以修改 \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++渲染,并且也應(yīng)該支持金山詞霸取詞(未驗(yàn)證,我沒裝),帶目前7.3的1-32個(gè)補(bǔ)丁,其他語言支持只帶Python2.6,未加入Perl/Ruby/Tcl/Python3等。
- 下載見最后,用 :version 看下版本

重新編譯后的gvim 7.3下載: gvim 7.3 20101021
帶md5驗(yàn)證 8416f911cbba02e7b2b02d46228c5781 *gvim.exe
2010年10月28日更新
重新編譯的 gvim 7.3.047下載: gvim73_47
md5驗(yàn)證 34e95349b474f41fae9a1486832c0165 *gvim.exe
2010年11月01日更新
根據(jù)3中提到的修改os_mswin.c,也是注釋掉一行代碼,使gvim可以支持非等寬字體(比如微軟雅黑)。因?yàn)閣indows自身的編碼是cp936,而使用非等寬字體需要設(shè)置編碼為utf-8,因此菜單會(huì)亂碼。修改了部分在vimrc中的相關(guān)配置,第一部分設(shè)置幫助語言為中文,同時(shí)設(shè)置菜單為英文,終端提示為中文;第二部分修改編碼;最后設(shè)置英文字體為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
|
看看此時(shí)的字體效果,順便看下版本:
重新編譯的支持非等寬字體/支持屏幕取詞/支持GDI++渲染的gvim 7.3.047下載: gvim73_47_non_mono
MD5驗(yàn)證: f2aee45be349c6207c0b79293da97ea3 *gvim.exe
2011年4月2日更新
從google code更新了一下(hg pull && hg up),重新運(yùn)行一遍批處理,gvim 7.3.152下載:gvim73_152_non_mono
MD5驗(yàn)證:4f98f2e50042988268ccc35a873b44e8 *gvim.exe
|