Completamento del codice Vim per Python 3


26

Sto eseguendo Debian Jessie e uso l'attuale vim-nox (con + python -python3). Sto facendo fatica a provare a programmare in Python 3, mentre faccio fatica con il completamento del codice di Python 3.

YouCompleteMe non supporta affatto Python3. jedi-vim supporta il completamento di Python 3, ma solo se avessi l'opzione + python3 se lo capissi correttamente. Da diversi post di Debian Developers sembra che compilare Vim con il flag + python3 non funzioni davvero. Pertanto mi rimane il plugin in modalità Python.

Oltre al fatto che la modalità Python sembra non mantenuta (vedi open pull-request e last commit) e attualmente ha un enorme bug relativo alla corda nel suo ramo principale, interferisce con YouCompleteMe. Ottengo il completamento del codice Python 3, ma solo se disabilito YouCompleteMe totalmente. La lista nera di YCM per i tipi di file python o la disabilitazione del completamento YCM per i file python non funziona, ricevo un avviso YCM ogni volta che apro vim.

Quindi le mie domande sono:

Come posso far funzionare un completamento automatico di Python 3 su una distribuzione Debian corrente senza disattivare YouCompleteMe (che voglio per altri linguaggi di programmazione)? Come mai un plugin non mantenuto è l'unica scelta al momento per il completamento del codice per un linguaggio di programmazione così importante (Python 3 non può più essere considerato nuovo ..)?


2
"Come mai un plugin non mantenuto è l'unica scelta al momento per il completamento del codice per un linguaggio di programmazione così importante " -> Non ci sono quasi progetti Python 3, quasi tutti i programmi Python funzionano bene su Python 2 e 3, quindi Python 2 il completamento dovrebbe essere buono per quasi tutti.
Martin Tournoij,

Concordato con @Carpetsmoker. Vim arriva con il completamento di Python fuori dalla scatola e funziona anche con Python3. In effetti, il completo pitone predefinito integrato in Vim è quello che uso. No YCM, no Jedi-vim, no Python-mode. Vedi la mia risposta se vuoi ancora + python3
akshay

Ho appena verificato il completamento di Python, non sapevo che questo script fosse incluso in una normale installazione di VIM. Questa è sicuramente una buona opzione di base. Ti capita di conoscere un modo semplice per pythoncomplete di aggiungere parentesi alla chiamata di funzioni (ad es. Print (''))?
xt440

Penso che dovresti modificarlo tu stesso. La fonte è disponibile qui su vim.org: vim.org/scripts/script.php?script_id=1542 . Certo, è piuttosto vecchio, ma funziona abbastanza bene per me.
akshay,

Risposte:


17

Il modo ideale è ottenere la fonte di Vim e compilarla da soli.

Passaggio 1: per sistemi simili a Debian, ottenere i pacchetti richiesti:

sudo apt-get build-dep vim

Step 2: Clona il codice sorgente di Vim:

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

Passaggio 3: configura, crea, installa

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

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

Step 4: Fatto! Dovresti avere una versione enorme di vim, con il supporto + python3. Ha anche il supporto + appunti in modo da poterlo utilizzare con gli appunti di sistema e una versione gui.

Naturalmente, puoi rimuovere i flag di configurazione che non desideri o aggiungerne alcuni. YouCompleteMe in realtà ha una wiki abbastanza lunga dedicata a spiegare come costruire Vim dal sorgente qui


Grazie per la risposta rapida. Sono stato in grado di creare vim con il supporto + python3 / dyn e + python / dyn. Ma questo non risolve il mio problema. Non appena avvio vim, YouCompleteMe si avvia (che avvia sempre python2 per quanto ne so). Quando entro :echo has('python3')ottengo 0, mentre :echo has('python')ritorna 1. Ho le seguenti opzioni nel mio Vimrc, ma non aiutano: 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

Per il passaggio 1, raccomando invece:apt-get build-dep vim
200_success

@ 200_success, non sono sicuro se questo abbassa anche le cose x11 necessarie per il supporto degli appunti. Non ho una macchina Linux con me per controllare però.
akshay,

Da Packages.debian.org/jessie/vim , vedere il .dscfile collegato nella barra laterale. Credo che tutti i pacchetti che hai suggerito, eccetto mercurial, siano elencati direttamente o in modo transitorio Build-Depends. In particolare, libgnomeui-devè probabilmente responsabile di molte di queste dipendenze.
200_successo

@ 200_successo, abbastanza giusto, grazie! Aggiornato il post.
akshay,

4

jedi-vim funziona bene per me ora con il supporto + python3 in vim. In aggiunta la seguente opzione al mio Vimrc: let g:jedi#force_py_version = 3.


4

Scrivere questo più come una nota per me che per qualsiasi cosa, ma forse questo sarà utile per alcuni: su Arch Linux, puoi installare una versione di vim compilata con python3:

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

Digita y e questo sostituirà il tuo vim esistente con il vim abilitato per python3.

Poi:

# pacman -S vim-jedi

installerà il completamento automatico, per python3.


4

Da un paio di settimane, YouCompleteMe supporta il completamento di Python3 utilizzando Jedi tramite un wrapper JediHTTP. Installa YouCompleteMe solo (non è necessario installare jedi-vim) secondo le istruzioni di installazione e aggiungi la seguente riga al tuo .vimrc:

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

Ciò impone a YCM di utilizzare Jedi con Python3 (l'impostazione predefinita è utilizzare Jedi con lo stesso interprete Python utilizzato dal server ycmd, che è Python2).

Funziona indipendentemente dal fatto che Vim sia compilato con o senza il +python3flag: ottieni il completamento automatico di Python3 (e la documentazione cerca e altro).


1

Sono in una posizione in cui devo passare costantemente tra due progetti Python, uno usando Python 2 e l'altro Python 3. Come hai notato youcompleteme non funziona con Python 3.

Per prima cosa ho compilato una versione aggiuntiva di vim con python 3 (che inizio con vim3) e utilizzo vundle come gestore di plugin.

Nel mio .vimrc ho:

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'

Disabilita youcompleteme quando eseguo vim3, ma ho invece il completamento automatico jedi-vim. Ho appena iniziato a usarlo, e questo post sul blog dice che non sono compatibili insieme ma per me funziona il completamento automatico in entrambi, i lavori go-to-definition di jedi, il pylint in modalità pitone funziona e nessun plugin si lamenta all'avvio. Tutto bene finora :)


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.