Завершення коду Vim для Python 3


26

Я запускаю Debian Jessie і використовую поточний vim-nox (з + python -python3). Мені важко намагатися програмувати в Python 3, коли я борюся із завершенням коду Python 3.

YouCompleteMe взагалі не підтримує Python3. jedi-vim підтримує завершення Python 3, але тільки якщо у мене буде варіант + python3, якщо я правильно його розумію. З кількох дописів розробників Debian, схоже, компіляція Vim із прапором + python3 насправді не працює. Тому мені залишається плагін python-режиму.

Окрім того, що режим python здається незмінним (див. Відкриті запити і останні зобов’язання), і він наразі має величезну помилку щодо мотузки у своїй головній гілці, він заважає YouCompleteMe. Я дійсно отримую роботу із завершенням коду Python 3, але лише якщо я повністю відключу YouCompleteMe. Чорний список YCM для файлових типів python або відключення завершення YCM для файлів python не працює, я отримую попередження YCM кожного разу, коли відкриваю vim.

Тому мої запитання:

Як я можу змусити автозавершення Python 3 працювати над поточним дистрибутивом Debian, не вимикаючи YouCompleteMe (що я хочу для інших мов програмування)? Чому невмілий плагін - єдиний на даний момент вибір для завершення коду для такої важливої ​​мови програмування (Python 3 вже не можна вважати новим ..)?


2
"Чому непідтримуваний плагін - єдиний на даний момент вибір для завершення коду для такої важливої ​​мови програмування " -> Проектів, які відповідають лише Python 3, майже немає, майже всі програми Python добре працюють на Python 2 і 3, тому Python 2 завершення має бути добре майже для всіх.
Мартін Турной

Погоджено з @Carpetsmoker. Vim поставляється із завершенням роботи Python, і він також творить чудеса і з Python3. Насправді, я використовую pythoncomplete, який вбудований у Vim. Ні YCM, ні Jedi-vim, ні режим Python. Дивіться мою відповідь, якщо ви все ще хочете + python3
akshay

Я щойно перевірив pythoncomplete, я не знав, що цей скрипт включений у звичайну установку vim. Це, безумовно, хороший базовий варіант. Чи знаєте ви простий спосіб для pythoncomplete додати дужки до функцій виклику (наприклад, print (''))?
xt440

Я думаю, що вам доведеться самі це змінити. Джерело доступне тут на vim.org: vim.org/scripts/script.php?script_id=1542 . Справді, він досить старий, але працює для мене досить добре.
акшай

Відповіді:


17

Ідеальний спосіб - отримати джерело Vim і скласти його самостійно.

Крок 1. Для систем, схожих на Debian, отримайте необхідні пакети:

sudo apt-get build-dep vim

Крок 2. Клоніруйте вихідний код Vim:

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

Крок 3: Налаштуйте, зробіть, встановіть

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

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

Крок 4: Готово! У вас повинна бути величезна версія vim, з підтримкою + python3. У ньому також є підтримка + буфер обміну, щоб ви могли використовувати її з буфером обміну системи та версією gui.

Звичайно, ви можете видалити прапори конфігурації, які ви не хочете, або додати деякі. YouCompleteMe насправді має вікі досить довжини, присвячений поясненню того, як створити Vim з джерела тут


Дякую за швидку відповідь. Мені вдалося створити vim із підтримкою + python3 / dyn та + python / dyn. Але це не вирішує мою проблему. Як тільки я запускаю vim, запускається YouCompleteMe (який завжди запускає python2, наскільки я знаю). Коли я входжу, :echo has('python3')я отримую 0, тоді як :echo has('python')повертається 1. У мене є такі параметри в моєму .vimrc, але вони не допомагають: 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

Для кроку 1 замість цього рекомендую:apt-get build-dep vim
200_вдача

@ 200_success, я не впевнений, що це також знижує речі x11, необхідні для підтримки буфера обміну. У мене немає машини Linux зі мною, щоб перевірити, хоча.
акшай

З пакунків.debian.org/ jessie/ vim дивіться .dscфайл, пов'язаний на бічній панелі. Я вважаю, що всі запропоновані вами пакунки, за винятком того mercurial, що вони перераховані безпосередньо чи перехідно Build-Depends. Зокрема, libgnomeui-devмабуть , є причиною багатьох із цих залежностей.
200_успіх

@ 200_success, досить чесно, дякую! Оновлено публікацію.
акшай

4

зараз jedi -vim для мене працює з підтримкою + python3 у vim. У додали наступну опцію в моєму .vimrc: let g:jedi#force_py_version = 3.


4

Писати це більше як замітку собі, ніж що-небудь, але, можливо, це буде корисно комусь: на Arch Linux ви можете встановити версію vim, складену з python3:

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

Введіть y, і це замінить існуючий vim на vim з підтримкою python3.

Потім:

# pacman -S vim-jedi

встановить автодоповнення для python3.


4

З декількох тижнів YouCompleteMe підтримує завершення Python3, використовуючи джедаї через обгортку JediHTTP. Встановіть YouCompleteMe (не потрібно встановлювати jedi-vim) відповідно до інструкцій із встановлення та додайте до свого рядка наступний рядок .vimrc:

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

Це змушує YCM використовувати Jedi з Python3 (за замовчуванням - використовувати Jedi з тим же інтерпретатором Python, який використовується сервером ycmd, який є Python2).

Це працює незалежно від того, чи компілюється ваш Vim з +python3прапором або без нього - ви отримуєте Python3 автодоповнення (а документація шукає та інше).


1

Я в положенні, коли мені доводиться постійно перемикатися між двома проектами python, один використовуючи python 2, інший python 3. Як ви зазначили, youcompleteme не працює з python 3.

Спочатку я склав додаткову версію vim з python 3 (яку я починаю з vim3), і я використовую vundle як менеджер плагінів.

У своєму .vimrc у мене є:

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'

Він відключає youcompleteme, коли я запускаю vim3, але натомість у мене є автозаповнення jedi-vim. Я лише почав його використовувати, і в цій публікації в блозі йдеться про те, що вони не сумісні разом, але для мене автозаповнення працює в обох проектах, "джид-і-до-визначення", "pylint" режиму python працює і жоден плагін не скаржиться на запуск. Все добре поки що :)


0

Використовуйте deoplete і deoplete-jedi, якщо ви відкриті для neovim. На мій досвід, це працює досить добре, де YCM має трохи клопотів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.