Lane East 的 blog

一百年很短,一秒钟很长

编译自己的 (g)Vim for windows

2008-09-25 02:46

vim 7.2 发布后到现在, 已经有了22个补丁, 具体的情况可以看 ftp://ftp.vim.org/pub/vim/patches/7.2/ 下的 README 文件, 里面写了各个补丁的作用.

那如果想用打了补丁的 vim 要怎么办呢? 在 vim 的下载页 上可以找到包含了补丁的 vim 的下载链接, 可以去下载了试试, 而我通常是自己编译来用的, 毕竟这不算复杂:)

过程如下:

我是用 MinGW(gcc) 来编译 vim 的, 所以要先去 sourceforge 的页面 上去下载 MinGW-5.x.x.exe, 目前是 5.1.4, 下载下来之后用它可以自动下载安装 MinGW 的包, 选择 MinGW base tool 和 g++ compiler, g++ compiler 是编译 GvimExt 要用的, GvimExt 提供了右键菜单中“用 vim 打开“项的功能, 我还是很喜欢这个的:).

因为我们需要 patch 来给 vim 的代码打补丁, 而其它版本的 patch 似乎不太好用, 所以我用的是 MSYS, 我是在 这个页面 下载的 MSYS-1.0.10.exe.

安装过程中会问你是否要运行 postinstall, 以及是否已经安装了 MinGW, 前面已经安装了MinGW, 所以这里面我都是选的y, 然后要指定 MinGW 的安装目录, 提示用 c:/foo/bar 的形式, 所以我写的是 C:/MinGW, 然后就一切OK, 可以用桌面上的MSYS来运行了:)

然后就是 vim 的代码和补丁了. 针对 windows 的 vim 代码可以在 ftp://ftp.vim.org/pub/vim/pc/ 目录下面找到, 有 vim72src.zip, vim72rt.zip, vim72lang.zip三个文件. 而补丁可以在 ftp://ftp.vim.org/pub/vim/patches/7.2/ 下找到, 就是那些 7.2.xxx 文件, 为了省事, 我把这些全下载了, 当然, 可以看说明选择需要的, 有些是不需要的, 比如针对 mac 平台的之类的, 不过, 当补丁多了的时候, 选择也是件很麻烦的事. :)

下载完了之后, 把 vim72src.zp 和 vim72lang.zip 解压到同一个地方, 比如 C:\, 这样就得到了 C:\vim\vim72 这样的目录结构, 下面是 src, lang 之类的目录了.

因为 vim 的补丁是按照 unix 版的 vim 代码组织的, 所以我们要把 vim72rt.zip的内容按照 unix 的目录结构存放, 这样才方便打补丁.

vim72rt.zip 下面的结构也是 vim\vim72 这样的, 我们把 vim\vim72 下面的内容(不要vim\vim72的结构)放到 C:\vim\vim72\runtime 目录下, 然后就可以开始打补丁编译了.

运行 MSYS, 切换到 vim 的目录下: cd /c/vim/vim72

打补丁(我把补丁放在了 c:\vim\patches 下面): for file in ../patches/7.2.*; do patch -Np0 -i $file; done

这时候会提示某些补丁不能打, 因为我下载的是全部的补丁, 而我使用的是针对 windows 的 vim 代码, 这个时候回车两次, 就会跳过这个补丁, 接着打下面的, 所以这里基本就是不停的回车了, 我觉得这样比在很多的补丁中找不要的要省事, 尤其在之前编译 7.1 的时候, 有几百个补丁…

打完补丁之后就开始编译了, 我只需要 gvim, 不需要针对控制台版本的 vim, 而且我也不需要OLE支持(想知道 vim 的 OLE 支持是干什么的, :help ole 一下吧 :D), 所以运行下面的命令:

cd src
make -f Make_ming.mak GUI=yes OLE=no USERNAME=lane USERDOMAIN=zion

USERNAMEUSERDOMAIN 是指定用户名和主机名, 这个是会在 :version 中显示出来的, 如果不指定的话, 就会自动使用 windows 的设置.

在 make 命令中, 还可以加一些优化参数, 比如 ARCH=pentium4 之类的. 这个 Make_ming.mak 中默认是关闭了 perl, python, ruby, tcl 支持的, 因为这对于我来说用不上, 所以我也就没有打开它们.

这样 (g)Vim 就编译好了. 但是哪些是我们需要用到的文件呢? 其实, 哪怕只用一个 gvim.exe, 也是可以运行的, 当然我是不想这么用的 ;)

其实在 vim/vim72/ 下有一个 nsis, 是用来做安装包的, 做安装包还要其它一些用不着的程序, 比如 for win9x 的 vimd32.exe, for winnt 的 vimw32.exe之类的, 所以我不打算做安装包, 但是我可以参考它打包的内容, 知道它究竟弄了哪些文件 :)

按照 nsis 下的 gvim.nsi 文件, 我一共复制了如下的文件:

  • vim\vim72\src 下面的 gvim.exe, install.exe, uninstall.exe, vimrun.exe.
  • vim\vim72\src\GvimExt 下的 gvimext.dll
  • vim\vim72\src\xxd 下的 xxd.exe
  • vim\vim72 下的 uninstal.txt
  • vim\vim72 下的 libintl.dll
  • vim\vim72 下的整个 lang 目录
  • vim\vim72\runtime 下的所有 .vim 文件, README.txt, vimtutor.bat, rgb.txt
  • vim\vim72\runtime 下的 colors 目录, compiler 目录, doc 目录(只留下 tags 文件和 .txt 文件, 其它删除), ftplugin 目录, indent 目录, macros 目录(下面的子目录都删除), plugin 目录, autoload 目录, syntax 目录, spell 目录(只留下 .txt, .vim, .spl, .sug 文件, 其它文件及子目录删除), tools 目录和 tutor 目录
  • vim\vim72\runtime 下的 lang 目录中的文件, 都复制到刚才复制的那个 lang 目录中去, 这些是不同语言的菜单.

这样, 一共是 13 个目录, 29 个文件. 还差一个 vim 用来比较文件的 diff.exe, 这个可以直接在官方的安装包中提取, 这个安装包是可以直接用 7-zip 打开的, 或者你已经安装了官方的 vim 的话, 直接复制就可以了.

当然, 这样的得到的目录和用官方安装文件选择 Vim executables and runtimes files, Native Languages Support 两个部分进行安装之后的文件结构是一样的, 这样(对于我来说)就够用了, 当然可以把其它的文件从官方的安装文件中提取出来放进去, 不过我用不着那些部分:)

当然, 这样看起来是有些麻烦, 其实实际做起来, 也不算太麻烦, 如果嫌麻烦, 可以做一个简单的脚本完成, 不过, 我是不想弄这个了 :D

当然, 这里面有很多的东西是用不上的, 比如拼写检查, 其它语言的相关文件, 不需要的语法高亮, 缩进文件之类的, 当然还有些其它的东西, 是可以删除的.

这样做出来的一个 vim 还有个好处, 是可以随身携带的版本, 配置文件就直接是这个目录下的 vimrc 或者 _vimrc 文件. 当然, 官方的版本也可以直接复制文件, 但是, 因为官方的是有 OLE 支持的, 所以在一台新机器上运行的时候, 会要注册OLE, 所以感觉不算太好:)

如果想要在右键菜单中添加“用 vim 打开“之类的菜单的话, 可以用 install.exe 来完成.

当然, 如果愿意, 还可以把中文帮助文件也加进去 ;)

分类:

评论

  1. 谢谢您~
    第一次学编译源码
    终于成功了~

    JansonL · 2010-11-05 09:25 · #

  预览后可提交