Fedora
在 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 <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')
:
- 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 語句的條件。
當然,如果你這樣做,你真的只需要修復第一個載入的內容。