在 Fedora 24 中的 vim 上启用 python3

在 Fedora 24 中的 vim 上启用 python3

我已经安装了 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')

  1. YouCompleteMe:我知道你已经注释掉了这个,但这就是我偶然发现这个问题的方式,所以它可能会引导其他人来这里。在 YouCompleteMe/plugin/youcompleteme.vim 的第 36 行,首先检查 python3:elseif !has( 'python3' ) && !has( 'python' )

  2. python-mode:如果你查看 python-mode/plugin/pymode.vim,第 275 行左右有“has”if 语句,你会注意到你实际上可以设置一个全局变量g:_uspy来强制使用某个版本。因此,要么将g:_uspy = ':py3'.vimrc 放在 Vundle 内容之前,要么编辑 pymode.vim 中的 if 语句。

  3. 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

相关内容