如何在Windows上启用gVim中的Python支持?

55

我正在尝试在Windows上的gVim中获取Python支持。是否有办法实现这一点?

我正在使用:

  • Windows XP SP3
  • gVim v. 7.3
  • Python 2.7.13 (通过Windows安装程序二进制文件安装的ActivePython)

我不知道发生了什么事,但是当我重新安装Python 2.7时,它在没有任何调整的情况下就被gvim支持了。 - wassimans
1
我发现如果我尝试使用2.7.11 DLL,Vim会立即崩溃,但是使用2.7.9版本的DLL似乎可以正常工作。 - dash-tom-bang
gvim是32位的,Python也必须是32位的。 - KunMing Xie
12个回答

45

我曾经遇到了同样的问题,但是在Windows 7上,重启并不能解决它。

我已经安装了gVim 7.3。当时Python的当前版本是3.3,因此我安装了它。但是 :has ("python") 和 :has ("python3") 仍然返回0。

经过多次尝试和错误,我确定了以下几点:

  • 如果gVim是32位的,通常即使在64位的Windows上也是如此(可以使用 :version 命令进行确认),那么您还需要安装32位的Python
  • 不需要重新启动Windows 7
  • Python的版本需要与gVim编译的版本匹配,因为它会寻找特定的DLL名称。您可以从gVim中的 :version 命令中了解到这一点,它会给出类似于以下内容:

Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32
-DFEAT_CSCOPE -DFEAT_ NETBEANS_INTG -DFEAT_XPM_W32 -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo.\ObjGOLYHTR/ / Ox /GL -DNDEBUG /Zl /MT -DFEAT_OLE -DFEAT_MBYTE_IME -DDYNAMIC_IME -DFEAT_GUI_W32 -DDYNAMI C_ICONV -DDYNAMIC_GETTEXT -DFEAT_TCL -DDYNAMIC_TCL

-DDYNAMIC_TCL_DLL=\"tcl83.dll\" 表示动态链接Tcl的库文件为“tcl83.dll”,-DDYNAMIC_TCL_VER=\"8.3\" 表示Tcl版本为8.3。-DFEAT_PYTHON表示支持Python,-DDYNAMIC_PYTHON表示使用动态链接的Python,-DDYNAMIC_PYTHON_DLL=\"python27.dll\" 表示动态链接Python的库文件为“python27.dll”。-D FEAT_PYTHON3表示支持Python 3,-DDYNAMIC_PYTHON3表示使用动态链接的Python 3,-DDYNAMIC_PYTHON3_DLL=\"python31.dll\" 表示动态链接Python 3的库文件为“python31.dll”。“-DFEAT_PERL”表示支持Perl,-DDYNAMIC_PERL表示使用动态链接的Perl,-DDYNAMIC_PERL_DLL=\"perl512.dll\" 表示动态链接Perl的库文件为“perl512.dll”。“-DFEAT_RUBY”表示支持Ruby,-DDYNAMIC_RUBY表示使用动态链接的Ruby,-DDYNAMIC_RUBY_VER=191表示Ruby版本为1.9.1,-DDYNAMIC_RUBY_DLL=\"msvcrt-ruby191.dll\" 表示动态链接Ruby的库文件为“msvcrt-ruby191.dll”。“-DFEAT_BIG /Fd.\ObjGOLYHTR/ /Zi”表示启用大型文件支持和生成调试信息。
因此,上述内容告诉我实际上不需要Python 3.3,而是需要3.1(或2.7)。安装Python 3.1后,“:has ("python")”仍返回0,但“:has ("python3")”现在返回1。这应该意味着基于Python的脚本现在可以工作了!我想未来的gVim版本可能会编译其他版本的Python,但使用这种方法应该能让您找出需要的版本。

2
好的,在很多次安装 Python 3.5.1 64位和32位的尝试以及许多次重启后,最终找到了答案... - Hubro

38

通常情况下,官方的gvim发行版中已经内置了对Python的支持。

不过你需要安装Python:Python Downloads

可以通过以下方式检查vim是否支持Python:

:echo has("python")

28
我下达了指令,但返回值是“0”。这就是我提出问题的原因。 - wassimans
6
正如我在上面的评论中提到的,重新安装Python并重启系统后它现在可以工作了。'echo'命令现在返回1。我认为我必须选择您的答案作为答案。谢谢。 - wassimans
3
也许是安装顺序的问题:我先安装了Python 2.7.1然后安装gvim,但它没有工作。然后我再次安装了Python 2.7.1...现在它可以工作了。这是否意味着我需要在安装Python之前安装gvim? - Lionel
@Lionel 不确定,但是Python安装程序可能会更新注册表中正确指向Python DLL的路径。您可能需要登录注销一次。 - David
1
@llinfeng 我曾经遇到过同样的错误。我通过重新安装32位版本的Python(2.7和3.6),使用“仅限我”选项(而不是所有用户)来解决它。然后,手动将python27.dll和python3.dll复制到windows/system32目录中。然后重新启动计算机,问题就解决了。如果你为所有用户安装,无论安装32位版本还是64位版本,dll文件都没有被安装在Python安装路径或system32文件夹中,原因未知。 - Joel
显示剩余2条评论

27

我在 Windows 7 64 位系统上遇到了这个问题。我发现我使用的是 64 位的 Python 2.7.3 和 32 位的 vim 7.3-46。我重新安装了它们的 32 位版本,并且重启了电脑。现在它可以正常工作了。


好的,那时我的机器是32位的。不过你的情况很有趣。 - wassimans
请确保您已将可执行文件添加到路径中。 - coderek

11

如果您是通过 Windows 安装程序之一安装 Python,则该版本可能已编译为支持 Python 2.7。您可以通过运行以下命令进行验证:

:version

它将输出Vim编译时使用的所有选项。你的应该会显示类似于

+python/dyn +python3\dyn

这意味着您支持Python 2.7和3.x。 如果您已经有2.5版本,它将无法工作。 您需要升级到2.7或3.x版本。


我也遇到了这种情况 - 但显然:echo has("python")返回0"python3"返回0,这是我猜UtilSnips正在检查的)。 - icc97

8
抱歉贡献晚了。问题在于你无法将x86 vim与x64 Python库混合使用,所有建议的解决方案均要求重新安装x86 Python。我不想因为vim在Windows上没有提供公平的x64发行版而重新安装Python、Ruby和其他依赖项。好消息是,你仍然可以在http://vim.wikia.com/wiki/Where_to_download_Vim这个地方找到它,但需要注意Python库版本。祝你好运。

我使用了来自 https://bintray.com/veegee/generic/vim_x64 的那个,看起来运行良好。 - joon
我的Python和Vim都显示为32位,但似乎默认的Vim7.4没有包含Python绑定。然而,维基上的64位链接则包含了Python绑定。 - JonnyRaa

5

接受的答案没有解决我的问题,所以我决定发布我在一些努力后找到的解决方案。

首先,正如接受的答案指出的那样,您需要编译了python的gVim和相应的python安装。确保它们都是32位或64位的。 我发现www.vim.org的默认版本没有启用python,而且似乎是32位的,这与我的python27不匹配。最终我使用的是来自vim Git repository的构建“gvim_8.0.0003_x64.zip”

然后我解压缩它,将“vim80”文件夹复制到官方vim安装位置(由从www.vim.org下载的32位安装程序创建)中。

现在vim可以与我的64位python2.7一起使用。

更新于02/24/2017:

上述过程在另一台本地python安装为2.7.9的机器上失败了。我成功时的Python版本是2.7.11。

所以,看起来从vim Git仓库构建的版本适用于特定的Python版本。如果可以,请尝试将Python安装更新到2.7.11。如果必须使用旧版本的Python,则可能需要在您的计算机上构建Vim源代码。按照说明并使用Visual Studio提供的cmd而不是Windows默认cmd并不太难。

2
在您的.vimrc中添加以下脚本:
"最初的回答"
set pythonthreedll = python36.dll

大多数Windows中的vim发行版是动态加载python的,你必须告诉vim这个dll是什么,并确保python36.dll在你的PATH环境变量中。


我也遇到了关于 pythonthreehome 的建议。 - ashrasmun

1
我遇到了类似的问题。我已经使用Windows XP、Python 2.7和gVim 7享受vim的omni-completion功能数年了。最近我换了一台运行Windows 8.1的电脑。我安装了gVim和我喜欢的插件,然后尝试了一切。Omni-completion出现了一个错误,说我需要编译支持Python的vim版本。在那个阶段,我还没有安装Python。解决方法是安装Python,然后重新安装vim。Omni-conpletion现在可以正常工作了。也许安装顺序很重要。

0
当我输入:version时,它显示我的Vim未编译Python。可能是因为我当时没有安装Python(32位?)。
我按照建议安装了32位Python,但重新安装Vim似乎是必要的。

0
阅读以上内容后,我可以确认在Win8.1上安装它们的顺序很重要(至少对我来说是这样)。我已经安装了32位VIM 7.4几个月了,然后尝试添加Python,但无法完成。现在我保留了Python 2.7.9的安装并卸载/重新安装了VIM,现在它可以正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接