Vim-Code-Vervollständigung für Python 3


26

Ich verwende Debian Jessie und benutze das aktuelle vim-nox (mit + python -python3). Es fällt mir schwer, in Python 3 zu programmieren, da ich mit der Vervollständigung des Python 3-Codes zu kämpfen habe.

YouCompleteMe unterstützt Python3 überhaupt nicht. jedi-vim unterstützt die Python 3-Vervollständigung, aber nur, wenn ich die + python3-Option hätte, wenn ich sie richtig verstehe. Aus mehreren Beiträgen von Debian-Entwicklern geht hervor, dass das Kompilieren von Vim mit dem Flag + python3 nicht wirklich funktioniert. Daher habe ich das Python-Mode-Plugin.

Abgesehen von der Tatsache, dass der Python-Modus nicht aufrechterhalten zu sein scheint (siehe offene Pull-Requests und Last Commits) und derzeit einen großen Fehler in Bezug auf das Seil in seinem Master-Zweig aufweist, stört er YouCompleteMe. Ich bekomme einige Python 3-Code-Vervollständigung zum Laufen, aber nur, wenn ich YouCompleteMe vollständig deaktiviere. Das Sperren von YCM für Python-Dateitypen oder das Deaktivieren der YCM-Vervollständigung für Python-Dateien funktioniert nicht. Ich erhalte jedes Mal eine YCM-Warnung, wenn ich vim öffne.

Meine Fragen sind also:

Wie kann ich eine Python 3-Autovervollständigung auf eine aktuelle Debian-Distribution anwenden, ohne YouCompleteMe zu deaktivieren (was ich für andere Programmiersprachen möchte)? Wieso ist ein nicht gepflegtes Plugin momentan die einzige Wahl, um den Code für eine so wichtige Programmiersprache zu vervollständigen (Python 3 kann nicht mehr als neu angesehen werden ..)?


2
"Wie kommt es, dass ein nicht verwaltetes Plug-in im Moment die einzige Wahl für die Code-Vervollständigung für eine so wichtige Programmiersprache ist? " -> Es gibt fast keine Python 3-Projekte, fast alle Python-Programme laufen einwandfrei unter Python 2 & 3, also Python 2 Abschluss sollte für fast alle gut sein.
Martin Tournoij

Einverstanden mit @Carpetsmoker. Vim wird mit Python-Komplettierung ausgeliefert und funktioniert auch mit Python3 wunderbar. Tatsächlich verwende ich das in Vim integrierte Standard-Pythoncomplete. Kein YCM, kein Jedi-Vim, kein Python-Modus. Sehen Sie meine Antwort, wenn Sie immer noch + python3
akshay

Ich habe gerade pythoncomplete ausgecheckt und wusste nicht, dass dieses Skript in einer normalen vim-Installation enthalten ist. Das ist auf jeden Fall eine schöne Grundoption. Kennen Sie eine einfache Methode, mit der Pythoncomplete dem Funktionsaufruf Klammern hinzufügt (z. B. print (''))?
xt440

Ich denke, Sie müssten das selbst ändern. Die Quelle finden Sie hier auf vim.org: vim.org/scripts/script.php?script_id=1542 . Zugegeben, es ist ziemlich alt, aber es funktioniert ziemlich gut für mich.
Akshay

Antworten:


17

Am besten holen Sie sich den Quellcode von Vim und kompilieren ihn selbst.

Schritt 1: Für Debian-ähnliche Systeme besorgen Sie sich die erforderlichen Pakete:

sudo apt-get build-dep vim

Schritt 2: Klonen Sie den Quellcode von Vim:

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

Schritt 3: Konfigurieren, Erstellen, Installieren

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

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

Schritt 4: Fertig! Sie sollten eine riesige Version von vim mit + python3-Unterstützung haben. Es hat auch + Zwischenablage-Unterstützung, so dass Sie es mit Ihrer System-Zwischenablage und einer GUI-Version verwenden können.

Natürlich können Sie configure - Flags entfernen Sie nicht wollen , oder etwas in hinzufügen. YouCompleteMe hat eigentlich eine ziemlich Wiki Länge gewidmet erklären , wie Vim von der Quelle zu bauen hier


Vielen Dank für Ihre schnelle Antwort. Ich konnte vim mit der Unterstützung von + python3 / dyn und + python / dyn erstellen. Aber das löst mein Problem nicht. Sobald ich vim starte, startet YouCompleteMe (was meines Wissens immer python2 startet). Wenn ich eintrete, :echo has('python3')bekomme ich 0, während :echo has('python')zurückkehrt 1. Ich habe folgende Optionen in meinem .vimrc, aber sie helfen nicht: 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

Für Schritt 1 empfehle ich stattdessen:apt-get build-dep vim
200_success

@ 200_success, ich bin mir nicht sicher, ob dies auch die für die Unterstützung der Zwischenablage erforderlichen x11-Komponenten beeinträchtigt. Ich habe keinen Linux-Rechner dabei, den ich überprüfen könnte.
Akshay

Unter packages.debian.org/jessie/vim finden Sie die .dscin der Seitenleiste verknüpfte Datei. Ich glaube, dass alle Pakete, die Sie vorgeschlagen haben mercurial, entweder direkt oder transitiv als aufgeführt sind Build-Depends. Insbesondere libgnomeui-devist wahrscheinlich für viele dieser Abhängigkeiten verantwortlich.
200_success

@ 200_erfolg, fair genug, danke! Der Beitrag wurde aktualisiert.
Akshay

4

jedi-vim funktioniert jetzt für mich mit + python3-unterstützung in vim. In hinzugefügt , um die folgende Option auf meine .vimrc: let g:jedi#force_py_version = 3.


4

Schreiben Sie dies mehr als Notiz an mich selbst als an alles andere, aber vielleicht ist dies für einige nützlich: Unter Arch Linux können Sie eine mit python3 kompilierte Version von vim installieren:

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

Geben Sie y ein und dies ersetzt Ihr vorhandenes vim durch das python3-fähige vim.

Dann:

# pacman -S vim-jedi

Installiert die Autovervollständigung für Python3.


4

YouCompleteMe unterstützt seit einigen Wochen die Python3-Vervollständigung mit Jedi über einen JediHTTP-Wrapper. Installieren Sie YouCompleteMe nur gemäß den Installationsanweisungen (es ist nicht erforderlich, jedi-vim zu installieren) und fügen Sie die folgende Zeile hinzu .vimrc:

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

Dies zwingt YCM, Jedi mit Python3 zu verwenden (standardmäßig wird Jedi mit demselben Python-Interpreter verwendet, der vom ycmd-Server verwendet wird, nämlich Python2).

Dies funktioniert unabhängig davon, ob Ihr Vim mit oder ohne +python3Flag kompiliert wurde - Sie erhalten die automatische Vervollständigung von Python3 (und die Dokumentation wird nachgeschlagen und vieles mehr).


1

Ich bin in der Lage, ständig zwischen zwei Python-Projekten zu wechseln, eines mit Python 2 und das andere mit Python 3. Wie Sie bemerkt haben, funktioniert youcompleteme nicht mit Python 3.

Zuerst habe ich eine zusätzliche Version von vim mit Python 3 kompiliert (ich beginne mit vim3) und ich benutze vundle als Plugin-Manager.

In meinem .vimrc habe ich:

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'

Es deaktiviert youcompleteme, wenn ich vim3 ausführe, aber ich habe stattdessen die automatische Vervollständigung von jedi-vim. Ich habe gerade erst damit angefangen, und in diesem Blog-Beitrag heißt es, dass sie nicht miteinander kompatibel sind, aber für mich funktioniert Autocomplete in beiden, jedis Go-to-Definition-Arbeiten, Python-Mode's Pylint-Arbeiten und keine Plugins, die sich beim Start beschweren. Alles gut soweit :)


0

Verwenden Sie deoplete und deoplete-jedi, wenn Sie neovim gegenüber aufgeschlossen sind. Nach meiner Erfahrung funktioniert das ganz gut, da YCM ein bisschen Ärger hat.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.