Ativando o python3 no vim no Fedora 24

2

Eu tenho o vim instalado e está configurado com +python3/dyn . Se eu executar vim --noplugin , posso usar py3 . No entanto, com os meus plugins ativados, recebo o seguinte erro:

E837: This Vim cannot execute :py3 after using :python
E263: Sorry, this command is disabled, the Python library could not be loaded.

Eu suspeito que um dos plugins carregue o python2 e, portanto, defina qual versão do Python está sendo usada ( semelhante a este vim -bootstrap questão ). O problema é que não sei qual.

Como posso usar o python3 com minha versão vim?

Plungins Instalados

Os seguintes plugins são instalados com o 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'

Tentando tornar o Python3 a versão padrão / preferida

Eu tentei fazer do python3 a alternativa preferida executando:

alternatives --install /usr/bin/python python /usr/bin/python3.5 2
alternatives --install /usr/bin/python python /usr/bin/python2.7 1

vim (ou um dos plugins) ainda usa python2.7 e eu recebo os mesmos erros acima.

Minha versão do 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. 
    
por pandita 24.08.2016 / 10:29

2 respostas

8

O problema é que simplesmente executar has('python') em uma instrução if faz com que python3 fique indisponível quando o vim foi compilado com python / dyn e python3 / dyn. A solução mais simples é provavelmente adicionar algo como

if exists('py2') && has('python')
elseif has('python3')
endif

para o seu .vimrc antes que o Vundle carregue alguma coisa. Então, se você precisar usar o python 2, basta iniciar o vim com vim --cmd 'let py2 = 1' .

Alternativamente, examinei seus plug-ins e consegui encontrar 3 que fazem has('python') antes de has('python3') :

  1. YouCompleteMe: Eu sei que você comentou isso, mas é como eu me deparei com essa pergunta para que possa levar alguém aqui. Na linha 36 de YouCompleteMe / plugin / youcompleteme.vim, faça python3 ser checado primeiro: elseif !has( 'python3' ) && !has( 'python' ) .

  2. python-mode: Se você olhar em python-mode / plugin / pymode.vim, por volta da linha 275 há o "has" if-statement, você notará que pode realmente definir uma variável global g:_uspy para forçar uma certa versão a ser usada. Então, coloque g:_uspy = ':py3' em seu .vimrc antes do material do Vundle ou edite a declaração if em pymode.vim.

  3. vim-virtualenv: Mesma transação que YCM, inverta as condições da instrução if na linha 10 do vim-virtualenv / plugin / virtualenv.vim.

É claro que você só precisa consertar o primeiro que está carregado, se você fizer dessa maneira.

    
por 28.08.2016 / 11:10
0

Supondo que você tenha o python 3 instalado ...

Em vez de executar :python , use :python3 ou :py3

Tente este código no Vim e ele será executado em python 3

:python3 print("Hello world")

Para mais informações:

:help python3
    
por 02.02.2017 / 10:33