Vim自动补全功能出现运行时错误

16
我想使用Vim的omnicompletion功能来补全我的Python代码,但是每次我尝试使用C-x + C-o时,它都显示以下错误信息:
运行时错误!
程序E:\ Vim \ vim73 \ gvim.exe R6034
应用程序尝试不正确地加载C运行时库。 有关更多信息,请联系应用程序的支持团队。
请问有谁能告诉我如何解决这个问题!非常感谢!
2个回答

22
我有同样的问题,gvim无法加载Python pyd dll。有一些技巧可以解决导致上述问题的.pyd dll。我不确定是否有任何方法可以解决所有dll的运行时错误。
请参考在Windows上未嵌入正确的msvc运行时清单链接来解决您的问题。
更新: 与其为.pyd文件更新清单,我尝试直接为gvim更新清单,通过从python.exe清单中进行一些更改来更新原始gvim清单。
# dump manifest from gvim.exe
>> mt.exe -inputresource:gvim.exe;#1 -out:gvim.manifest

# dump manifest from python.exe
# *I use python26 for gvim, default gvim come with python27
>> mt.exe -inputresource:c:\python26\python.exe;#1 -out:python.manifest

# manually edit gvim.manifest, just change the line with dependentAssembly with
# line from the python.manifest which will depend on VC90.CRT
# Then, update the edited manifest into gvim.exe
>> mt.exe -manifest gvim.manifest -outputresource:gvim.exe;1

以下是我编辑过的gvim.manifest:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
  <assemblyIdentity processorArchitecture="*" version="7.3.0.0" type="win32" name="Vim"></assemblyIdentity>
  <description>Vi Improved - A Text Editor</description>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>

  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>

  <asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
      <dpiAware>true</dpiAware>
    </asmv3:windowsSettings>
  </asmv3:application>
</assembly>   

2
+1 这真是荒谬,但这解决了问题。 - Hubro
由于我的环境问题,我在让vim和python协同工作方面遇到了很多困难。如上所述修改gvim的清单完全解决了我的问题。我自己想不到这一点。谢谢! - Mark
1
仍然适用于vim74的2015年。 - Gagan

4
我遇到了相同的问题(Windows 7),通过删除PATH变量中包含msvcr90.dll的路径,我解决了这个问题。删除了几个条目后,错误停止弹出。不幸的是,我没有记录我删除的哪些条目。但其中一个是C:\Program Files (x86)\OpenVPN\bin以及包括Windows Live在内的其他几个条目。
我从这里得到了提示,在路径中寻找问题(页面底部):https://bitbucket.org/Haroogan/vim-youcompleteme-for-windows/src

2
感谢您的解决方案。在我的情况下,是我最近安装的cmake :) - Maciek
感谢@Maciek提到这一点,对我来说也是cmake的问题。我只需从其目录中删除运行时dll文件,因为它已安装在我的系统上,所以没有必要将其保留在那里。 - Tamás Szelei
非常感谢!我在工作目录中有一个名为msvcr90.dll的文件,导致了这个问题。 - randlet
这对我有用。语义云端点保护或类似的东西以某种莫名其妙的原因出现在我的路径中。 - Keith Pinson

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