Achèvement du code Vim pour Python 3

26

J'utilise Debian Jessie et j'utilise le vim-nox actuel (avec + python -python3). J'ai du mal à programmer en Python 3, car j'ai du mal à terminer le code Python 3.

YouCompleteMe ne prend pas du tout en charge Python3. jedi-vim prend en charge l'achèvement de Python 3, mais seulement si j'aurais l'option + python3 si je la comprends correctement. D'après plusieurs articles des développeurs Debian, il semble que la compilation de Vim avec l'indicateur + python3 ne fonctionne pas vraiment. Par conséquent, je me retrouve avec le plugin en mode python.

Outre le fait que le mode python semble non maintenu (voir les demandes d'ouverture et les derniers commits) et qu'il a actuellement un énorme bug concernant la corde dans sa branche principale, il interfère avec YouCompleteMe. J'obtiens de l'achèvement de code Python 3 pour travailler, mais seulement si je désactive totalement YouCompleteMe. Mettre sur liste noire YCM pour les types de fichiers python ou désactiver la complétion YCM pour les fichiers python ne fonctionne pas, je reçois un avertissement YCM chaque fois que j'ouvre vim.

Mes questions sont donc:

Comment puis-je obtenir une autocomplétion Python 3 pour travailler sur une distribution Debian actuelle sans désactiver YouCompleteMe (ce que je veux pour d'autres langages de programmation)? Comment se fait-il qu'un plugin non entretenu soit actuellement le seul choix pour l'achèvement du code pour un langage de programmation aussi important (Python 3 ne peut plus être considéré comme nouveau ..)?

xt440
la source
2
"Comment se fait-il qu'un plugin non entretenu soit le seul choix pour le moment pour l'achèvement de code pour un langage de programmation aussi important " -> Il n'y a presque pas de projets Python 3 uniquement, presque tous les programmes Python fonctionnent correctement sur Python 2 & 3, donc Python 2 l'achèvement devrait être bon pour presque tout le monde.
Martin Tournoij
En accord avec @Carpetsmoker. Vim est livré avec Python prêt à l'emploi, et cela fonctionne également avec Python3. En fait, le pythoncomplete par défaut intégré à Vim est ce que j'utilise. Pas de YCM, pas de Jedi-vim, pas de mode Python. Voir ma réponse si vous voulez toujours + python3
akshay
Je viens de vérifier pythoncomplete, je ne savais pas que ce script est inclus dans une installation normale de vim. C'est vraiment une bonne option de base. Connaissez-vous un moyen simple pour pythoncomplete d'ajouter des crochets à l'appel de fonctions (par exemple, print (''))?
xt440
Je pense que vous devrez modifier cela vous-même. La source est disponible ici sur vim.org: vim.org/scripts/script.php?script_id=1542 . Certes, c'est assez vieux, mais ça marche plutôt bien pour moi.
akshay
github.com/klen/python-mode
bhathiya-perera

Réponses:

17

L'idéal est d'obtenir la source de Vim et de la compiler vous-même.

Étape 1: Pour les systèmes de type Debian, obtenez les packages requis:

sudo apt-get build-dep vim

Étape 2: Cloner le code source de Vim:

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

Étape 3: Configurer, créer, installer

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

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

Étape 4: terminé! Vous devriez avoir une version énorme de vim, avec le support + python3. Il prend également en charge + le presse-papiers afin que vous puissiez l'utiliser avec le presse-papiers de votre système et une version gui.

Bien sûr, vous pouvez supprimer les indicateurs de configuration dont vous ne voulez pas ou en ajouter. YouCompleteMe a en fait un wiki assez long dédié à expliquer comment construire Vim à partir des sources ici

akshay
la source
Merci pour votre réponse rapide. J'ai pu construire vim avec le support + python3 / dyn et + python / dyn. Mais cela ne résout pas mon problème. Dès que je démarre vim, YouCompleteMe démarre (qui démarre toujours python2 pour autant que je sache). Quand j'entre, :echo has('python3')je reçois 0, tandis que :echo has('python')revient 1. J'ai les options suivantes dans mon .vimrc, mais ils ne contribuent pas à : 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
Pour l'étape 1, je recommande plutôt:apt-get build-dep vim
200_success
@ 200_success, je ne sais pas si cela réduit également les éléments x11 nécessaires à la prise en charge du presse-papiers. Je n'ai cependant pas de machine Linux avec moi pour vérifier.
akshay
Depuis packages.debian.org/jessie/vim , consultez le .dscfichier lié dans la barre latérale. Je crois que tous les packages que vous avez suggérés, sauf mercurial, sont répertoriés directement ou de manière transitoire Build-Depends. En particulier, libgnomeui-devest probablement responsable de bon nombre de ces dépendances.
200_success
@ 200_success, c'est juste, merci! Mis à jour le message.
akshay
4

jedi-vim fonctionne bien pour moi maintenant avec le support + python3 dans vim. Dans ajouté l'option suivante à mon .vimrc: let g:jedi#force_py_version = 3.

xt440
la source
4

L'écrire plus comme une note pour moi que n'importe quoi, mais peut-être que cela sera utile pour certains: sur Arch Linux, vous pouvez installer une version de vim compilée avec python3:

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

Tapez y et cela remplacera votre vim existant par le vim activé python3.

Ensuite:

# pacman -S vim-jedi

va installer l'auto-complétion, pour python3.

John Smith facultatif
la source
4

Depuis quelques semaines, YouCompleteMe prend en charge l'achèvement de Python3 en utilisant Jedi via un wrapper JediHTTP. Installez YouCompleteMe uniquement (pas besoin d'installer jedi-vim) selon les instructions d'installation et ajoutez la ligne suivante à votre .vimrc:

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

Cela oblige YCM à utiliser Jedi avec Python3 (la valeur par défaut est d'utiliser Jedi avec le même interpréteur Python que celui utilisé par le serveur ycmd, qui est Python2).

Cela fonctionne peu importe si votre Vim est compilé avec ou sans l' +python3indicateur - vous obtenez l'auto-complétion Python3 (et la recherche de documentation et plus).

cbaumhardt
la source
1

Je suis dans une position où je dois constamment basculer entre deux projets python, l'un utilisant python 2, l'autre python 3. Comme vous l'avez noté, youcompleteme ne fonctionne pas avec python 3.

J'ai d'abord compilé une version supplémentaire de vim avec python 3 (que je commence par vim3) et j'utilise vundle comme gestionnaire de plugins.

Dans mon .vimrc j'ai:

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'

Il désactive youcompleteme lorsque j'exécute vim3, mais j'ai la saisie semi-automatique jedi-vim à la place. Je viens juste de commencer à l'utiliser, et ce billet de blog dit qu'ils ne sont pas compatibles ensemble, mais pour moi, les travaux de saisie semi-automatique fonctionnent dans les deux, les travaux de définition de Jedi, les travaux de pylint en mode Python et aucun plugin ne se plaint au démarrage. Tout va bien jusqu'à présent :)

beluga.me
la source
0

Utilisez deoplete et deoplete-jedi si vous êtes ouvert aux néovim. D'après mon expérience, cela fonctionne assez bien, où YCM a un peu de tracas.

Jongwook Choi
la source