VIM-未知函数:pythoncompleteComplete
在.py文件中键入以下代码时:VIM-未知函数:pythoncompleteComplete,python,vim,omnicomplete,Python,Vim,Omnicomplete,在.py文件中键入以下代码时: import numpy numpy. 然后按下触发Omnicompletion的TAB键,我得到以下错误: Error: Required vim compiled with +python E117: Unknown function: pythoncomplete#Complete 但是,当我键入vim-version | grep python时,我得到: 有人能解释这种行为吗?或者有人有什么想法去挖掘?在stackoverflow上也有类似的问题,但
import numpy
numpy.
然后按下触发Omnicompletion的TAB键,我得到以下错误:
Error: Required vim compiled with +python
E117: Unknown function: pythoncomplete#Complete
但是,当我键入vim-version | grep python时,我得到:
有人能解释这种行为吗?或者有人有什么想法去挖掘?在stackoverflow上也有类似的问题,但在这种情况下,VIM是在不支持python的情况下编译的。请使用
:echo has('python')
这可能是因为,即使您的Vim是用Python编译的,Python解释器的动态加载也会失败,这通常是因为找不到相应的共享库。您可以在Compilation:下的:version输出中找到它的名称。显然,您的vim是在python3/dyn和python/dyn两个python版本的动态支持下编译的。在此设置中,您应该记住一件事: 命令中有“python”和“python3”已经专门调用了这个特定python版本的用法。 显然,YCM在调用“python3”之前先调用“python”,这样python3在vim会话的其余部分变为活动状态,而python2变为非活动状态。pythoncompleteComplete只对python2起作用。 因此,您可以通过在vimrc的最顶端显式调用python2来修复pythoncompleteComplete:
set nocompatible
if has('python') " if dynamic py|py3, this line already activates python2.
let s:python_version = 2
elseif has('python3')
let s:python_version = 3
else
let s:python_version = 0
endif
echomsg 'Using python'.s:python_version
在vimrc的其余部分中,您可以使用s:python\u版本检查python版本,如果您不需要,则作业中已经有命令。您可能需要python2和pytho3,就像我的情况一样 让g:python3\u host\u prog='C:/Bin/Miniconda3/python.exe' 让g:python\u host\u prog='C:/Bin/miniconda2/python.exe' :在我执行此操作之前,echo已将“python”返回0。 在我的案例中需要YCM、ensime和neoterm
直接从neoterm站点windows下载显然对于这种情况来说:echo的'python'返回值为1,因此这似乎不是一个有趣的问题;这正是autoload/pythoncomplete.vim中的检查,根据您的错误,这里似乎返回0。在我的问题和我的评论之间,我安装了YouCompleteMe。我刚刚发现,当删除YouCompleteMe时,has'python'返回零;当再次添加YouCompleteMe时,has'python'再次返回一。另外,在安装YCM后,我可以输入:call pythoncompleteComplete,不再获得未知函数错误,相反,我没有足够的参数,并且我可以通过键入Ctrl+x和Ctrl+o成功完成OmniComplete,因为YCM现在正在使用TAB。尝试使用VimCompletesMe插件设置本地omnifunc=python3completeComplete。
set nocompatible
if has('python') " if dynamic py|py3, this line already activates python2.
let s:python_version = 2
elseif has('python3')
let s:python_version = 3
else
let s:python_version = 0
endif
echomsg 'Using python'.s:python_version