【发布时间】:2016-01-09 21:22:41
【问题描述】:
虽然没有官方对 windows 环境的支持,但似乎很多人已经成功地完成了这项工作。
我也拼命尝试,但没有成功。
我现在需要的只是为 php 文件工作自动补全(全能补全,关键字补全)。
我正在运行 x64 位版本的已编译 Vim 74 (+python27, +python33) here
我从同一个人那里下载了为 Windows 编译的 YouCompleteMe here
我一如既往地使用pathogen 插件安装了插件。 我已经安装了 Python27 和 Python33 (x64),并且都放在了我的 PATH 中。 (也是windows/System32/目录下的python27.dll)
处于这种状态。如果我运行 Vim,我会收到 error:
"ycmd 服务器关闭(以 ... 重新启动)。Stder(最后 30 行)...”
在 vim 启动时。同时错误日志说:
RuntimeError:导入 ycm_core 时出错。你确定你已经在文件夹中放置了 3.2+ 版本的 libclang.[so|dll|dylib] "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python"?
所以我在特定文件夹(x64 位版本)中提供了libclang.dll,尽管我正在编辑一个 php 文件(不是 c 系列文件),所以这不相关。是吗?
好的,现在我处于启动时仍然出错的情况:
"ycmd 服务器关闭(以 ... 重新启动)。Stder(最后 30 行)...”
但错误日志已更改,它显示:
调试 - 没有全局额外配置,没有调用方法 YcmCorePreload
Traceback(最近一次调用最后一次):文件“C:\ Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server../..\ycm\server\handlers.py", 第 23 行,在
import ycm_core ImportError: Module use of python27.dll 与此版本的 Python 冲突。在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件“C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server/ycmd.py", 第 126 行,在
Main() 文件 "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server/ycmd.py", 第 115 行,在 Main 从 ycm.server 导入处理程序文件 "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server../..\ycm\server\handlers.py", 第 30 行,在 str( e ) ) ) RuntimeError: 导入 ycm_core 时出错。你确定你已经在文件夹中放置了 3.2+ 版本的 libclang.[so|dll|dylib] “C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python”?见 文档中的安装指南。完全错误:python27.dll的模块使用 与此版本的 Python 冲突。
这是什么意思?我很确定我需要版本(Python 277 x64bit)。
我能做些什么?有人可以帮助我在 Windows 环境下工作吗?
更新:
@sooop 的回答让我前进了一点,这很有帮助。
问题是在 PATH 中,我在“c:\Python27”前面放置了“c:\Python33”。所以它找到了第一个提供的python版本并退出搜索Py27。所以我把“c:\Python27”放在“c:\Python33”之前,这条消息就消失了。
不幸的是发生了另一个错误:现在错误日志显示:
文件 "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server../..\ycm\server\handlers.py", 第 23 行,在 import ycm_core ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件“C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server/ycmd.py", 第 126 行,在 Main() 文件 "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server/ycmd.py", 第 115 行,在 Main 从 ycm.server 导入处理程序文件 "C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python\ycm\server../..\ycm\server\handlers.py", 第 30 行,在 str( e ) ) ) RuntimeError: 导入 ycm_core 时出错。你确定你已经在文件夹中放置了 3.2+ 版本的 libclang.[so|dll|dylib] “C:\Program Files\Vim\vimfiles\bundle\you-complete-me\python”?见 文档中的安装指南。完全错误:DLL 加载失败:%1 未加载 一个有效的 Win32 应用程序。
不幸的是,我也不知道该怎么做。
解决方案
@sooop 的回答解决了最后两个错误。 YouCompleteMe plugin 仅支持 Python27(和 Py26)。并且%PATH%环境变量中"\Python27\python.exe"的路径必须在第一个位置,在其他python版本之前!
【问题讨论】:
-
对于它的价值,YCM 对 PHP 补全没有什么特别的:它只使用 Vim 自己的全能补全脚本,所以,如果你只需要 PHP 补全,你可以放弃那个怪物和它的疯狂依赖以获得更轻量级并且易于安装“auto-”或“tab-”完成插件,如 AutoComplPop 或 VCM。
-
是的,我没有正确表达。现在我使用 AutoComplPop 插件,但它非常有限。它只从打开的缓冲区中收集关键字。除了 AutoComplPop,我还使用 tern 进行语义 JavaScript 自动补全。但是我讨厌我必须总是按下组合键来触发弹出菜单。我希望它自动显示。使用 YCM 的另一个可能的好处是集成 eclim 插件以获得更好的 php 自动补全。
-
我制作了this fork of ACP 来支持JS和PHP。
-
哦,谢谢@romainl!我试过了,它肯定好多了。特别是对于结合了 tern 的 JavaScript。对于 php 它也比以前更好。如果也输入“->”,它会触发全能补全吗?
标签: php windows vim autocomplete