Finalización del código Vim para Python 3

26

Estoy ejecutando Debian Jessie y uso el vim-nox actual (con + python -python3). Me está costando mucho intentar programar en Python 3, ya que me cuesta completar el código de Python 3.

YouCompleteMe no es compatible con Python3 en absoluto. jedi-vim admite la finalización de Python 3, pero solo si tuviera la opción + python3 si la entiendo correctamente. De varias publicaciones de desarrolladores de Debian parece que compilar Vim con la bandera + python3 no está funcionando realmente. Por lo tanto, me queda el complemento del modo python.

Además del hecho de que el modo python parece no mantenido (ver solicitudes de extracción abiertas y últimas confirmaciones) y actualmente tiene un gran error relacionado con la cuerda en su rama maestra, interfiere con YouCompleteMe. Obtengo algo de terminación de código de Python 3 para trabajar, pero solo si deshabilito YouCompleteMe por completo. No funciona la lista negra de YCM para los tipos de archivo de Python o la desactivación de la finalización de YCM para los archivos de Python, recibo una advertencia de YCM cada vez que abro vim.

Entonces mis preguntas son:

¿Cómo puedo hacer que un autocompletado de Python 3 funcione en una distribución Debian actual sin desactivar YouCompleteMe (que quiero para otros lenguajes de programación)? ¿Cómo es que un complemento no mantenido es la única opción en este momento para completar el código de un lenguaje de programación tan importante (Python 3 ya no puede considerarse nuevo ...)?

xt440
fuente
2
"¿Cómo es que un complemento no mantenido es la única opción en este momento para completar el código de un lenguaje de programación tan importante? " la finalización debería ser buena para casi todos.
Martin Tournoij
De acuerdo con @Carpetsmoker. Vim viene con Python completado de fábrica, y también funciona de maravilla con Python3. De hecho, el pythoncomplete predeterminado que viene integrado en Vim es lo que uso. Sin YCM, sin Jedi-vim, sin modo Python. Mira mi respuesta si todavía quieres + python3
akshay
Acabo de comprobar pythoncomplete, no sabía que este script está incluido en una instalación vim normal. Definitivamente es una buena opción básica. ¿Conoces una manera fácil para que pythoncomplete agregue corchetes a la llamada a funciones (por ejemplo, print (''))?
xt440
Creo que tendrías que modificar eso tú mismo. La fuente está disponible aquí en vim.org: vim.org/scripts/script.php?script_id=1542 . Es cierto que es bastante viejo, pero me funciona bastante bien.
akshay
github.com/klen/python-mode
bhathiya-perera

Respuestas:

17

La forma ideal es obtener la fuente de Vim y compilarla usted mismo.

Paso 1: para sistemas similares a Debian, obtenga los paquetes necesarios:

sudo apt-get build-dep vim

Paso 2: código fuente de Clone Vim:

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

Paso 3: configurar, hacer, instalar

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

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

Paso 4: ¡Listo! Debería tener una versión enorme de vim, con soporte para + python3. También tiene soporte para portapapeles + para que pueda usarlo con el portapapeles de su sistema y una versión gui.

Por supuesto, puede eliminar los indicadores de configuración que no desea o agregar algunos. YouCompleteMe en realidad tiene un wiki bastante extenso dedicado a explicar cómo construir Vim desde la fuente aquí

akshay
fuente
Gracias por su pronta respuesta. Pude construir vim con soporte para + python3 / dyn y + python / dyn. Pero eso no resuelve mi problema. Tan pronto como inicio vim, YouCompleteMe se inicia (que siempre inicia python2 hasta donde yo sé). Cuando entro :echo has('python3')me sale 0, mientras que :echo has('python')vuelve 1. Tengo las siguientes opciones en mi .vimrc, pero no ayudan a: 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
Para el paso 1, recomiendo en su lugar:apt-get build-dep vim
200_success
@ 200_success, no estoy seguro si eso también elimina las cosas x11 necesarias para el soporte del portapapeles. Sin embargo, no tengo una máquina Linux para verificar.
akshay
En packages.debian.org/jessie/vim , vea el .dscarchivo vinculado en la barra lateral. Creo que todos los paquetes que sugirió, excepto mercurial, se enumeran directa o transitivamente como Build-Depends. En particular, libgnomeui-deves probablemente responsable de muchas de esas dependencias.
200_success
@ 200_success, bastante justo, ¡gracias! Se actualizó la publicación.
akshay
4

jedi-vim funciona bien para mí ahora con soporte para + python3 en vim. En añade la siguiente opción para mi .vimrc: let g:jedi#force_py_version = 3.

xt440
fuente
4

Escribir esto más como una nota para mí mismo que cualquier otra cosa, pero tal vez esto sea útil para algunos: en Arch Linux, puede instalar una versión de vim compilada con python3:

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

Escriba y y esto reemplazará su vim existente con el vim habilitado para python3.

Luego:

# pacman -S vim-jedi

instalará el autocompletado, para python3.

John Smith opcional
fuente
4

Desde hace un par de semanas, YouCompleteMe admite la finalización de Python3 usando Jedi a través de un contenedor JediHTTP. Solo instale YouCompleteMe (no es necesario instalar jedi-vim) de acuerdo con las instrucciones de instalación y agregue la siguiente línea a su .vimrc:

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

Esto obliga a YCM a usar Jedi con Python3 (el valor predeterminado es usar Jedi con el mismo intérprete de Python que usa el servidor ycmd, que es Python2).

Esto funciona sin importar si su Vim se compila con o sin la +python3marca: obtendrá la finalización automática de Python3 (y la búsqueda de documentación y más).

cbaumhardt
fuente
1

Estoy en una posición en la que tengo que cambiar constantemente entre dos proyectos de Python, uno con Python 2 y el otro con Python 3. Como notaron, completememe no funciona con Python 3.

Primero compilé una versión adicional de vim con python 3 (que comienzo con vim3) y uso vundle como administrador de complementos.

En mi .vimrc tengo:

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'

Deshabilita youcompleteme cuando ejecuto vim3, pero tengo el autocompletado jedi-vim en su lugar. Recién comencé a usarlo, y esta publicación de blog dice que no son compatibles entre sí, pero para mí el autocompletado funciona en ambos, los trabajos de definición de jedi, el pylint del modo python funciona y ningún complemento se queja al inicio. Todo bien hasta ahora :)

beluga.me
fuente
0

Use deoplete y deoplete-jedi si está abierto a neovim. En mi experiencia, esto funciona bastante bien, donde YCM tiene algunos problemas.

Jongwook Choi
fuente