Conclusão do código Vim para Python 3

26

Estou executando o Debian Jessie e uso o atual vim-nox (com + python -python3). Estou tendo dificuldades para programar no Python 3, pois luto com a conclusão do código do Python 3.

O YouCompleteMe não suporta Python3. O jedi-vim suporta a conclusão do Python 3, mas somente se eu tiver a opção + python3 se a entender corretamente. Em vários posts dos desenvolvedores Debian, parece que compilar o Vim com o sinalizador + python3 não está realmente funcionando. Portanto, fiquei com o plugin do modo python.

Além do fato de que o modo python parece não-mantido (consulte solicitações de recebimento abertas e último commit) e atualmente possui um enorme bug referente à corda em sua ramificação principal, ele interfere no YouCompleteMe. Eu recebo alguma conclusão de código do Python 3 para funcionar, mas somente se eu desativar o YouCompleteMe totalmente. A lista negra do YCM para tipos de arquivos python ou a desativação da conclusão do YCM para arquivos python não funcionam, recebo um aviso do YCM cada vez que abro o vim.

Então, minhas perguntas são:

Como faço para que um preenchimento automático do Python 3 funcione em uma distribuição Debian atual sem desativar o YouCompleteMe (que eu quero para outras linguagens de programação)? Por que um plug-in não mantido é a única opção no momento para o preenchimento de código para uma linguagem de programação tão importante (o Python 3 não pode mais ser considerado novo ..)?

xt440
fonte
2
"Por que um plug-in não mantido é a única opção no momento para a conclusão do código para uma linguagem de programação tão importante " -> Quase não existem projetos somente em Python 3, quase todos os programas em Python funcionam bem em Python 2 e 3, então Python 2 a conclusão deve ser boa para quase todos.
Martin Tournoij 7/03
Concordou com @Carpetsmoker. O Vim vem com a conclusão do Python pronta para uso e também faz maravilhas com o Python3. De fato, o pythoncomplete padrão que vem embutido no Vim é o que eu uso. Sem YCM, sem Jedi-vim, sem modo Python. Veja a minha resposta se você ainda quiser + python3
akshay
Acabei de verificar o pythoncomplete, não sabia que esse script está incluído em uma instalação normal do vim. Essa é definitivamente uma boa opção básica. Você conhece uma maneira fácil de o pythoncomplete adicionar colchetes à chamada de funções (por exemplo, print (''))?
Xt440
Eu acho que você teria que modificar isso sozinho. A fonte está disponível aqui em vim.org: vim.org/scripts/script.php?script_id=1542 . É certo que é bastante antigo, mas funciona muito bem para mim.
akshay
github.com/klen/python-mode
bhathiya-perera 31/07/15

Respostas:

17

A maneira ideal é obter a fonte do Vim e compilá-la você mesmo.

Etapa 1: Para sistemas do tipo Debian, obtenha os pacotes necessários:

sudo apt-get build-dep vim

Etapa 2: Clone o código-fonte do Vim:

cd /tmp && git clone https://github.com/vim/vim.git && cd vim

Etapa 3: configurar, criar, instalar

./configure --with-features=huge --enable-multibyte --enable-python3interp \
    --enable-gui=gtk-2 --prefix=/usr

make VIMRUNTIMEDIR=/usr/share/vim/vim74
sudo make install

Etapa 4: Feito! Você deve ter uma versão enorme do vim, com suporte ao + python3. Ele também possui suporte à área de transferência para que você possa usá-lo com a área de transferência do sistema e uma versão da GUI.

Obviamente, você pode remover os sinalizadores de configuração que você não deseja ou adicionar alguns. O YouCompleteMe realmente possui um wiki bastante longo, dedicado a explicar como criar o Vim a partir da fonte aqui

akshay
fonte
Obrigado pela sua resposta rápida. Consegui construir o vim com suporte para + python3 / dyn e + python / dyn. Mas isso não resolve o meu problema. Assim que inicio o vim, o YouCompleteMe é iniciado (que sempre inicia o python2 até onde eu sei). Quando entro :echo has('python3'), recebo 0, enquanto :echo has('python')retorna 1. Eu tenho as seguintes opções na minha .vimrc, mas eles não ajudam: let g:ycm_path_to_python_interpreter = '/usr/bin/python3 let g:ycm_filetype_specific_completion_to_disable = { 'python' : 1 } let g:ycm_filetype_blacklist = { 'python' : 1 }.
Xt440 7/03/2015
Para a etapa 1, recomendo:apt-get build-dep vim
200_success 7/15/15
@ 200_success, não tenho certeza se isso também reduz o material x11 necessário para o suporte à área de transferência. Eu não tenho uma máquina Linux comigo para verificar.
akshay
Em packages.debian.org/jessie/vim , consulte o .dscarquivo vinculado na barra lateral. Acredito que todos os pacotes que você sugeriu, exceto mercurial, são listados direta ou transitivamente como Build-Depends. Em particular, libgnomeui-devé provavelmente responsável por muitas dessas dependências.
200_success
@ 200_success, justo, obrigado! Atualizado a postagem.
akshay
4

O jedi-vim funciona bem para mim agora, com o suporte do + python3 no vim. Em acrescentou a seguinte opção ao meu .vimrc: let g:jedi#force_py_version = 3.

xt440
fonte
4

Escrevendo isso mais como uma nota para mim do que qualquer coisa, mas talvez isso seja útil para alguns: no Arch Linux, você pode instalar uma versão do vim compilada com python3:

# pacman -S vim-python3
resolving dependencies...
looking for conflicting packages...
:: vim-python3 and vim are in conflict. Remove vim? [y/N] y

Digite y e isso substituirá o seu vim existente pelo vim ativado por python3.

Então:

# pacman -S vim-jedi

instalará o preenchimento automático, para python3.

John Smith Opcional
fonte
4

algumas semanas, o YouCompleteMe suporta a conclusão do Python3 usando o Jedi por meio de um wrapper JediHTTP. Instale apenas o YouCompleteMe (não é necessário instalar o jedi-vim) de acordo com as instruções de instalação e adicione a seguinte linha ao seu .vimrc:

let g:ycm_python_binary_path = '/usr/bin/python3'

Isso força o YCM a usar o Jedi com Python3 (o padrão é usar o Jedi com o mesmo interpretador Python usado pelo servidor ycmd, que é Python2).

Isso funciona, não importa se o seu Vim é compilado com ou sem o +python3sinalizador - você obtém o preenchimento automático do Python3 (e a documentação consulta e muito mais).

cbaumhardt
fonte
1

Estou em uma posição em que tenho que alternar constantemente entre dois projetos python, um usando python 2 e o outro python 3. Como você observou, o completeme não funciona com o python 3.

Primeiro, compilei uma versão adicional do vim com python 3 (iniciada no vim3) e uso o vundle como gerenciador de plugins.

No meu .vimrc eu tenho:

Plugin 'davidhalter/jedi-vim' " for python3
Plugin 'Valloric/YouCompleteMe' " for python2


if has('python3')
    let g:loaded_youcompleteme = 1 " disables loading it! doesnt support python3
    let g:jedi#force_py_version = 3
    let g:pymode_python = 'python3'

Ele desativa o complemento quando executo o vim3, mas, em vez disso, tenho o preenchimento automático do jedi-vim. Eu apenas comecei a usá-lo, e este post do blog diz que eles não são compatíveis juntos, mas para mim o autocomplete funciona em ambos, os trabalhos de definição de jedi, o pylint do modo python funciona e nenhum plugin reclama na inicialização. Tudo de bom até agora :)

beluga.me
fonte
0

Use deoplete e deoplete-jedi se estiver aberto ao neovim. Na minha experiência, isso funciona muito bem, onde o YCM tem um pouco de aborrecimentos.

Jongwook Choi
fonte