【问题标题】:windows Vim YouCompleteMe auto-completionwindows Vim YouCompleteMe 自动补全
【发布时间】: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-”完成插件,如 AutoComplPopVCM
  • 是的,我没有正确表达。现在我使用 AutoComplPop 插件,但它非常有限。它只从打开的缓冲区中收集关键字。除了 AutoComplPop,我还使用 tern 进行语义 JavaScript 自动补全。但是我讨厌我必须总是按下组合键来触发弹出菜单。我希望它自动显示。使用 YCM 的另一个可能的好处是集成 eclim 插件以获得更好的 php 自动补全。
  • 我制作了this fork of ACP 来支持JS和PHP。
  • 哦,谢谢@romainl!我试过了,它肯定好多了。特别是对于结合了 tern 的 JavaScript。对于 php 它也比以前更好。如果也输入“->”,它会触发全能补全吗?

标签: php windows vim autocomplete


【解决方案1】:

恕我直言,另一种更清洁的解决方案是将 ycm 显式引用给您的 python 可执行文件。为此,请将以下内容放入您的 .vimrc 中:

let g:ycm_path_to_python_interpreter = 'c:\Python27_64\python.exe'

c:\Python27_64\python.exe 应替换为 python 可执行文件的完整路径。请注意,它的架构(即 32 位或 64 位)应与您的 vim 架构相匹配。

【讨论】:

    【解决方案2】:

    从您的 %PATH% 中删除路径 th python3。

    【讨论】:

    • 其实,你是对的。我完全忘记了我已经安装了另一个 python 版本,我在我的 PATH 中忽略了它。所以我也把它放在“c:\Python27\”之后。现在它正在工作...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多