Ukończenie kodu Vim dla Pythona 3

26

Używam Debian Jessie i używam obecnego vim-nox (z + python -python3). Trudno mi programować w języku Python 3, ponieważ mam problemy z uzupełnianiem kodu w języku Python 3.

YouCompleteMe w ogóle nie obsługuje Python3. jedi-vim obsługuje uzupełnianie języka Python 3, ale tylko jeśli miałbym opcję + python3, jeśli dobrze ją rozumiem. Z kilku postów deweloperów Debiana wydaje się, że kompilacja Vima z flagą + python3 tak naprawdę nie działa. Dlatego pozostaję z wtyczką trybu python.

Poza tym, że tryb pythona wydaje się nieobsługiwany (patrz otwarte żądania ściągania i ostatnie zatwierdzenia) i obecnie ma ogromny błąd dotyczący liny w gałęzi głównej, przeszkadza w YouCompleteMe. Dostaję trochę kodu do Pythona 3 do działania, ale tylko wtedy, gdy całkowicie wyłączę YouCompleteMe. Czarna lista YCM dla typów plików python lub wyłączanie uzupełniania YCM dla plików python nie działa, otrzymuję ostrzeżenie YCM przy każdym otwarciu vima.

Więc moje pytania to:

Jak mogę uzyskać autouzupełnianie w Pythonie 3 do pracy z bieżącą dystrybucją Debiana, nie wyłączając YouCompleteMe (co chcę dla innych języków programowania)? Dlaczego nieobsługiwana wtyczka jest obecnie jedynym wyborem do uzupełnienia kodu dla tak ważnego języka programowania (Python 3 nie może być już uważany za nowy ...)?

xt440
źródło
2
„Dlaczego nieobsługiwana wtyczka jest w tej chwili jedynym wyborem do uzupełnienia kodu dla tak ważnego języka programowania ” -> Prawie nie ma projektów tylko w języku Python 3, prawie wszystkie programy w Pythonie działają dobrze na Python 2 i 3, więc Python 2 ukończenie powinno być dobre dla prawie wszystkich.
Martin Tournoij,
Uzgodnione z @Carpetsmoker. Vim jest dostarczany z gotową wersją języka Python, a także działa cuda z Python3. W rzeczywistości używam domyślnego Pythona, który jest wbudowany w Vima. Bez YCM, bez Jedi-vim, bez trybu Python. Zobacz moją odpowiedź, jeśli nadal chcesz + python3
akshay
Właśnie sprawdziłem PythonComplete, nie wiedziałem, że ten skrypt jest zawarty w normalnej instalacji vima. To zdecydowanie dobra podstawowa opcja. Czy zdarza ci się, że znasz łatwy sposób dodawania nawiasów do wywołania funkcji (np. Print (''))?
xt440
Myślę, że sam musiałbyś to zmodyfikować. Źródło jest dostępne tutaj na vim.org: vim.org/scripts/script.php?script_id=1542 . Wprawdzie jest dość stary, ale dla mnie działa całkiem dobrze.
akshay,
github.com/klen/python-mode
bhathiya-perera

Odpowiedzi:

17

Idealnym sposobem jest zdobycie źródła Vima i samodzielne skompilowanie go.

Krok 1: W przypadku systemów podobnych do Debiana uzyskaj wymagane pakiety:

sudo apt-get build-dep vim

Krok 2: Kod źródłowy Clone Vima:

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

Krok 3: Skonfiguruj, wykonaj, zainstaluj

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

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

Krok 4: Gotowe! Powinieneś mieć ogromną wersję vima z obsługą + python3. Ma również obsługę schowka, dzięki czemu można go używać ze schowkiem systemowym i wersją GUI.

Oczywiście możesz usunąć flagi konfiguracji, których nie chcesz, lub dodać. YouCompleteMe faktycznie ma dość długą wiki poświęconą wyjaśnieniu, jak zbudować Vima ze źródła tutaj

akshay
źródło
Dzięki za szybką odpowiedż. Byłem w stanie zbudować vim z obsługą + python3 / dyn i + python / dyn. Ale to nie rozwiązuje mojego problemu. Jak tylko uruchomię vima, YouCompleteMe uruchamia się (co zawsze uruchamia Python2, o ile wiem). Kiedy wchodzę :echo has('python3'), dostaję 0, a :echo has('python')wraca 1. Mam następujące opcje w moim .vimrc, ale one nie pomagają: 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
Dla kroku 1 zalecam zamiast tego:apt-get build-dep vim
200_success
@ 200_success, nie jestem pewien, czy to również obniża x11 rzeczy potrzebnych do obsługi schowka. Jednak nie mam przy sobie linuksa do sprawdzenia.
akshay,
Z pakietów.debian.org/ jessie/ vim , zobacz .dscplik połączony na pasku bocznym. Uważam, że wszystkie pakiety, które zasugerowałeś, z wyjątkiem mercurial, są albo bezpośrednio, albo tranzytowo wymienione jako Build-Depends. W szczególności libgnomeui-devjest prawdopodobnie odpowiedzialny za wiele z tych zależności.
200_success
@ 200_success, wystarczy, dzięki! Zaktualizowano wpis.
akshay,
4

jedi-vim działa teraz dla mnie dobrze z obsługą + python3 w vimie. W dodany następującą opcję do mojego .vimrc: let g:jedi#force_py_version = 3.

xt440
źródło
4

Pisząc to bardziej jako notatkę dla siebie niż cokolwiek innego, ale być może przyda się to niektórym: w Arch Linux możesz zainstalować wersję vima skompilowaną z python3:

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

Wpisz y, a to zastąpi twój obecny vim vimem z włączonym Python3.

Następnie:

# pacman -S vim-jedi

zainstaluje autouzupełnianie dla python3.

John Smith Opcjonalnie
źródło
4

Od kilku tygodni YouCompleteMe obsługuje uzupełnianie Python3 przy użyciu Jedi przez opakowanie JediHTTP. Zainstaluj tylko YouCompleteMe (nie trzeba instalować jedi-vim) zgodnie z instrukcjami instalacji i dodaj następujący wiersz do .vimrc:

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

Zmusza to YCM do używania Jedi z Python3 (domyślnie jest to używanie Jedi z tym samym interpreterem Python, który jest używany przez serwer ycmd, którym jest Python2).

Działa to bez względu na to, czy Twój Vim jest skompilowany z +python3flagą czy bez niej - otrzymujesz autouzupełnianie Python3 (i przeglądanie dokumentacji i więcej).

cbaumhardt
źródło
1

Jestem w pozycji, w której muszę ciągle przełączać się między dwoma projektami Pythona, jeden za pomocą Pythona 2, a drugi Python 3. Jak zauważyłeś, twój completeme nie działa z Pythonem 3.

Najpierw skompilowałem dodatkową wersję vima z Pythonem 3 (którą zaczynam od vim3) i używam vundle jako menedżera wtyczek.

W moim .vimrc mam:

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'

Wyłącza cię, kiedy uruchamiam vim3, ale zamiast tego mam autouzupełnianie jedi-vim. Dopiero zacząłem go używać, a ten post na blogu mówi, że nie są one ze sobą kompatybilne, ale dla mnie działa autouzupełnianie w obu, działa w trybie przejścia do definicji jedi, działa w trybie python w trybie python i żadna wtyczka nie narzeka na uruchomienie. Jak dotąd wszystko dobrze :)

beluga.me
źródło
0

Użyj deoplete i deoplete-jedi, jeśli jesteś otwarty na neovim. Z mojego doświadczenia wynika, że ​​działa to całkiem dobrze, gdzie YCM ma trochę problemów.

Jongwook Choi
źródło