Завершение кода 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, нет джедаев, нет режима 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. Он также имеет поддержку + буфера обмена, так что вы можете использовать его с системным буфером обмена и версию графического интерфейса.

Конечно, вы можете удалить ненужные флаги настройки или добавить их. У 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_success

@ 200_success, я не уверен, что это также потянет за x11 вещи, необходимые для поддержки буфера обмена. У меня нет машины с Linux, чтобы проверить, хотя.
Акшай

На сайте packages.debian.org/jessie/vim смотрите .dscфайл, указанный на боковой панели. Я полагаю, что все предложенные вами пакеты, кроме mercurialкак, прямо или транзитивно перечислены как Build-Depends. В частности, libgnomeui-devвероятно, отвечает за многие из этих зависимостей.
200_success

@ 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 с использованием Jedi через оболочку 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. Как вы заметили, вы не работаете с 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-джедай , если вы открыты для neovim. По моему опыту это работает довольно хорошо, где у YCM есть немного неприятностей.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.