最后更新于 .

呃,之前在linux下编译过vim,这次由于gvim默认不支持python,所以心血来潮想要想在windows编译一下gvim,好吧,这纯属找虐……

一.准备工作:

1.Mingw,我用的版本是5.1.4

2.vim的源码文件

ftp://ftp.vim.org/pub/vim/pc/ 下载到vim72src.zip, vim72rt.zip, vim72lang.zip三个文件。 下载完之后, 把 vim72src.zp 和 vim72lang.zip 解压到 D:\makevim,查看D:\makevim\vim\vim72 这样的目录结构, 包含src,lang等目录。 vim72rt.zip的有些独特,先不要解压,直接打开看,里面vim\vim72下面会有autoload之类的文件和目录。新建一个目录D:\makevim\vim\vim72\runtime\,并把刚才看到的那些文件全都copy到这里。 ftp://ftp.vim.org/pub/vim/patches/7.2/ 可以下载到所有的patch,但我实在没有信心打上这么多patch还能编译通过。所以直接无视掉了。(如果想要打上的话,可以新建目录D:\makevim\vim\patch\,并在D:\makevim\vim\vim72目录下打开命令行,执行for file in ../patch/7.2.*; do patch -Np0 -i $file; done)

3.由于python3.*和2.*的语法有了很大差异,所以希望能让vim同时支持这两种版本(默认的python命令是2.6,py3是3.1) 所以在网上找到了一个专门为支持python3写的一个patch,vim-7.2.411_python3.patch 把这个文件放在D:\makevim\vim\vim72\下。

4.下载python2.6和python3.1,分别安装。

5.当然,你得已经装了官方下载的gvim7.2

二.编译

cd D:\makevim\vim\vim72
patch -p0 < vim-7.2.411_python3.patch

//有提示没有找到文件的,就直接回车,然后按y即可。

cd D:\makevim\vim\vim72\src

//在Make_ming.mak中添加如下行,从而加入python2.6和python3.1支持

PYTHON=c:\Python26
PYTHON_VER=26
PYTHON3=C:\Python31
PYTHON3_VER=31

//注意,不能只加入PYTHON3,那样编译会报错,负责会有如下的错误,当然改代码也可以解决。

make -f Make_ming.mak GUI=yes OLE=no USERNAME=dantezhu USERDOMAIN=tencent

就会启动编译啦,等编译完成,就会发现,src目录里多了一个gvim.exe~~,把他cp到你gvim的安装目录即可~~ 三.执行 OK~~,现在执行gvim,输入

:version

version

哈哈,不错吧,自己编译的gvim~ 再输入py,然后按下tab,看有多少命令?

python_show

OK,现在我们终于可以用pyflakes啦~~至于pyflakes的简单介绍,可以看一下牧马志的这篇博文~~ 在Vim中检查语法和执行代码在Vim中检查语法和执行代码 另,附已经编译好的gvim.exe下载


补充一下,刚刚试了一下在linux下编译,需要在执行./configure时增加

--enable-pythoninterp

我一般编译时的选项是:

./configure --prefix=/usr/vim --enable-multibyte --enable-pythoninterp --with-features=huge

Pingbacks

  1. Vim使用笔记-使用技巧 &#124; sosowo&#039;s blog on #

    [...] 这里有一篇关于在vim中添加Python支持的文章,值得参考: windows下编译vim(gvim)并加入python2.6和3.1支持 [...]

Pingbacks已打开。

Trackbacks

引用地址

评论

  1. GeassLei

    GeassLei on #

    很强大~~

    Reply

  2. Dante

    Dante on #

    补充一下,刚刚试了一下在linux下编译,需要在执行./configure时增加
    --enable-pythoninterp ,

    我一般编译时的选项是:
    ./configure --prefix=/usr/vim --enable-multibyte --enable-pythoninterp --with-features=huge

    Reply

  3. 依云

    依云 on #

    编译失败。。。
    make[1]: *** 没有规则可以创建“vim”需要的目标“@PYTHON3_OBJ@”。 停止。

    看到标题我就很激动了,能在Vim里用上Python3是件多么令我向往的事啊~~可是,在自行解决找不到Python.h后,又遇到这个问题了。。。

    Reply

  4. 依云

    依云 on #

    刚刚看到发表留言时红字显示的好像是“...please wait a comment.”?

    另外,我怎么没有找到文章的traceback地址?

    Reply

    1. Dante

      Dante on #

      哦哦,那个wait是因为用了ajax,所以要等你第一个评论发完,traceback地址的话就不清楚了……

      那个,你刚才说的编译的问题啊,好奇怪,为啥我都没遇到呢……,你的python路径是不是和默认的不一样?

      Reply

      1. 依云

        依云 on #

        我是想说,我预想的提示应该是 please wait a moment。

        Reply

        1. Dante

          Dante on #

          呃,可能主题作者主要是想强调一次只能一个评论吧……

          Reply

    2. Dante

      Dante on #

      要不先直接试试我编译好的那个能不能满足需求?

      Reply

      1. 依云

        依云 on #

        你编译好的那个是Windows版的,但我是Linux用户啊。如果你能帮我编译个那真是太好了。我的机器是32位的,编译参数是:

        ./configure --enable-gui=gnome2 --enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-cscope --enable-multibyte --enable-xim --enable-fontset --with-features=huge --disable-netbeans --prefix=/usr --enable-python3interp。

        修改过的文件: http://dl.dropbox.com/u/1372730/gui.c http://dl.dropbox.com/u/1372730/feature.h

        我这里编译 if_python.c 时没有找到头文件。手动加上 -I/usr/include/python2.6 后编译出错:
        if_python.c: In function ‘python_enabled’:
        if_python.c:372: error: ‘DYNAMIC_PYTHON_DLL’ undeclared (first use in this function)

        又自行修改 Makefile 及 config.mk,最终编译成功,在不加载自己的配置时可运行,但是——
        正常版本 带 GTK2 图形界面...-perl...-python -python3...-ruby

        Reply

        1. Dante

          Dante on #

          我在linux编译的都是没有界面的……,这个编译出来你也用不了应该……

          我明白了……,你是用文章中的安装包按的把,这个只能给windows用户编译,linux用户的话,看看这篇文章~~
          http://www.vimer.cn/2010/03/linux%e4%b8%8bvim%e7%9a%84%e7%bc%96%e8%af%91%e4%bb%a5%e5%8f%8a%e7%bb%88%e7%ab%af%e4%b9%b1%e7%a0%81%e7%9a%84%e6%9c%80%e7%bb%88%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88.html

          Reply

          1. 依云

            依云 on #

            编译Vim不是问题,问题是打了补丁就编译不成功了。仔细看了下,打补丁的时候都有3个地方失败了,另外还有打错的情况。不知你打补丁的时候情况如何。另外,我用的是7.2的源码,没有打其它补丁。你是不是用的源码不同?

            Reply

            1. Dante

              Dante on #

              我在linux下面编译的时候没有打补丁……即linux下的版本我没让他支持py3,只是windows版本是支持的,所以可能确实那个补丁只能支持windows版……

              Reply

              1. 依云

                依云 on #

                辛苦改好半天源代码终于编译成功,不过有个问题:Python2.6 和 Python3.1 不能同时使用。你的那个Windows版的可以吗?

                Reply

                1. Dante

                  Dante on #

                  呃,我那个python是2.6,py3的话是3.1……

                  Reply

  5. zombie

    zombie on #

    如果不需要打补丁支持Python 3,就不需要用Mingw了。从VIM的SVN checkout一份最新的代码,在src目录下有Make_mvc.mak,如果安装了VC,直接nmake -f ...就行了

    Reply

    1. Dante

      Dante on #

      呃,我的电脑上没VC的……习惯了linux的那一套了~

      Reply

  6. fuadam

    fuadam on #

    为什么我在ubuntu10.04下面编译vim就是没有python支持呢,参数就是按照博主的方法

    Reply

    1. Dante

      Dante on #

      额,文章说的是在windows下编译的哦,在linux下编译是2楼我说的方法……

      Reply

      1. fuadam

        fuadam on #

        昨天搞到3点多终于弄出来了,是没有安装openssl导致链接失败。

        Reply

        1. Dante

          Dante on #

          哈哈,恭喜恭喜~~

          Reply

  7. smalldoctor

    smalldoctor on #

    怎么在windows编译 在命令窗口输入 make patch 都说不是系统名利

    Reply

  8. JansonL

    JansonL on #

    在学 python
    为了在 gvim 下用
    第一次学编译源码
    终于编译成功~
    谢谢您写了这篇文章
    (第一次编译时提示
    make: gcc: command not found
    原来是没把 WinGW/bin 加入环境变量)

    Reply

  9. 杨

    on #

    我在XP下找不到patch命令啊 怎么回事?

    Reply

    1. Dante

      Dante on #

      patch是linux的命令哦,windows下需要单独安装的~

      Reply

  10. yxpan

    yxpan on #

    楼主您好!我是用Mercurial直接下载的最新源码,也安装了Python 2.7和3.1,进入src目录后用mingw32-make -f Make_ming.mak PYTHON=d:/Program\Files/Python27 PYTHON_VER=27
    PYTHON3=d:/Program\Files/Python31 PYTHON3_VER=31编译gvim.exe却总是得到提示说找不到Python.h。不知道怎么解决?

    Reply

    1. yxpan

      yxpan on #

      找到原因了,python的安装位置造成的。统统改到D盘根目录即可。

      Reply

  11. Nibnat

    Nibnat on #

    请问gvim74关于python3的插件有么?网上找了很久没找到

    Reply

  12. 夜下凝月

    夜下凝月 on #

    diff.c: In function 'ex_diffpatch':
    diff.c:905:12: error: storage size of 'st' isn't known
    stat_T st;
    ^~
    diff.c:905:12: warning: unused variable 'st' [-Wunused-varia ble]
    Make_cyg_ming.mak:935: recipe for target 'gobji686/diff.o' f ailed
    make: *** [gobji686/diff.o] Error 1
    请问这是什么原因造成的,vim80、、、python36、、、、编译一直失败

    Reply

  13. 多余

    多余 on #

    你好,编译好的gvim下载链接失效了,可以再分享一下吗

    Reply

发表评论