我已经安装了 vim 并且配置了+python3/dyn
.如果我跑步,vim --noplugin
我可以使用py3
.但是,启用插件后,我收到以下错误:
E837: This Vim cannot execute :py3 after using :python
E263: Sorry, this command is disabled, the Python library could not be loaded.
我怀疑其中一个插件加载了 python2,因此定义了正在使用的 python 版本(类似于这个 vim-bootstrap 问题)。问题是我不知道是哪个。
如何在我的 vim 版本中使用 python3?
已安装插件
以下插件随 Vundle 一起安装:
60 " let Vundle manage Vundle, required
61 Plugin 'gmarik/Vundle.vim'
62 "Bundle 'Valloric/YouCompleteMe'
63 Plugin 'tmhedberg/SimpylFold'
64 Plugin 'vim-scripts/indentpython.vim'
65 Plugin 'scrooloose/syntastic'
66 Plugin 'scrooloose/nerdtree'
67 Plugin 'jistr/vim-nerdtree-tabs'
68 Plugin 'kien/ctrlp.vim'
69 Plugin 'tpope/vim-fugitive'
70 Plugin 'nvie/vim-flake8'
71 "Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
72 Plugin 'vim-airline/vim-airline'
73 Plugin 'vim-airline/vim-airline-themes'
74 Bundle 'klen/python-mode'
75 Plugin 'jmcantrell/vim-virtualenv'
尝试使 Python3 成为默认/首选版本
我尝试通过运行以下命令使 python3 成为首选替代方案:
alternatives --install /usr/bin/python python /usr/bin/python3.5 2
alternatives --install /usr/bin/python python /usr/bin/python2.7 1
vim (或插件之一)仍然使用 python2.7,我得到与上面相同的错误。
我的vim版本
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 2 2016 10:02:17)
Included patches: 1-1868
Modified by <[email protected]>
Compiled by <[email protected]>
Huge version without GUI.
答案1
问题是,has('python')
当使用 python/dyn 和 python3/dyn 编译 vim 时,仅在 if 语句中执行会导致 python3 不可用。最简单的解决方案可能只是添加类似的内容
if exists('py2') && has('python')
elseif has('python3')
endif
在 Vundle 加载任何内容之前添加到您的 .vimrc 中。然后,如果您需要使用 python 2,您可以直接使用vim --cmd 'let py2 = 1'
.
或者,我查看了你的插件并设法找到了 3 个has('python')
以前的插件has('python3')
:
YouCompleteMe:我知道你已经注释掉了这个,但这就是我偶然发现这个问题的方式,所以它可能会引导其他人来这里。在 YouCompleteMe/plugin/youcompleteme.vim 的第 36 行,首先检查 python3:
elseif !has( 'python3' ) && !has( 'python' )
。python-mode:如果你查看 python-mode/plugin/pymode.vim,第 275 行左右有“has”if 语句,你会注意到你实际上可以设置一个全局变量
g:_uspy
来强制使用某个版本。因此,要么将g:_uspy = ':py3'
.vimrc 放在 Vundle 内容之前,要么编辑 pymode.vim 中的 if 语句。vim-virtualenv:与 YCM 相同,反转 vim-virtualenv/plugin/virtualenv.vim 第 10 行 if 语句的条件。
当然,如果您这样做,您实际上只需要修复加载的第一个。
答案2
假设你已经安装了 python 3...
:python
使用:python3
或代替运行:py3
在 Vim 中尝试此代码,它将在 python 3 中运行
:python3 print("Hello world")
欲了解更多信息:
:help python3