Fedora

在 Fedora 24 的 vim 上啟用 python3

  • March 1, 2017

我安裝了 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 <bugzilla@redhat.com>
Compiled by <bugzilla@redhat.com>
Huge version without GUI. 

問題是,has('python')當 vim 同時使用 python/dyn 和 python3/dyn 編譯時,簡單地在 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 語句的條件。

當然,如果你這樣做,你真的只需要修復第一個載入的內容。

引用自:https://unix.stackexchange.com/questions/305415