Vim Python completado
python jedi (2)
Estoy teniendo problemas con la terminación de Vim y Python. De hecho estoy totalmente confundido cómo funciona esto.
Tengo gvim 7.3 genérico, en windows 7 (con python / dyn) Estoy usando el complemento SuperTab, entre muchos otros, algunos de los cuales son específicos de python, con las siguientes configuraciones en vimrc:
au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"
No configuré el ambiente de PYTHONPATH varariable.
La finalización funciona bien para los módulos del sistema.
Al principio pensé que no funciona en absoluto para un código que no es del sistema, pero ese no es el caso. Lo que está sucediendo se muestra mejor en el siguiente código:
import numpy.random # if this line is commented completion in last line works
class C(object):
def __init__(self, x_):
self.x=x_
def getX(self):
return self.x
def pr(self):
print ''ok''
a=C(10) # nothing changes if I put C() instead, even though it would be wrong
a. # here is completion in question
El problema es que la finalización funciona (a. <tab> sugiere getX y pr) si se comenta la línea de importación. Pero hay import numpy.random, la terminación frena hacia abajo. Nota: esta importación funciona normalmente cuando ejecuto el código.
¿Cuáles son los requisitos previos para completar Python? ¿Qué está pasando y qué debo hacer para obtener el trabajo completo para Python?
Como soy (relativamente) nuevo en Vim, cualquier sugerencia es apreciada.
EDITAR: Parece que el problema está en el uso de ab forma en la importación. Si lo hago desde numpy importar al azar, todo está bien. Si esto es razonablemente fácil de arreglar, también me gustaría que ab de trabajar. Pero ahora que sé cómo hacerlo no es tan importante.
¿Hay algún problema más inusual como este para saber qué está pasando en el futuro?
Python, al ser un lenguaje increíblemente dinámico, no se presta para completarse. No hay ninguna finalización realmente buena por ahí. Es más fácil vivir sin él que luchar con todos sus problemas, OMI. Dicho esto, python-mode realmente es fantástico, como dijo neoascetic.
pythoncomplete es bastante antiguo y sin mantenimiento.
Trate de usar Jedi: https://github.com/davidhalter/jedi-vim Originalmente era una versión mejorada de python, pero ahora es mucho más potente.
Funciona para código complejo:
Y tiene características adicionales:
Hay una lista de todas las características posibles:
- funciones incorporadas / soporte de clases
- estructuras complejas de módulo / función / clase
- ignora los errores de sintaxis y sangría
- rendimientos / rendimientos múltiples
- Asignaciones de tuplas / indexación de matrices / indexación de diccionarios
- excepciones / con declaración
- * args / ** kwargs
- decoradores
- descriptores -> propiedad / staticmethod / classmethod
- cierres
- generadores (declaración de rendimiento) / iteradores
- soporte para algunos métodos mágicos:
__call__
,__iter__
,__next__
,__get__
,__getitem__
,__init__
- soporte para list.append, set.add, list.extend, etc.
- (anidado) lista de comprensión / expresiones ternarias
- importaciones relativas
-
getattr()
/__getattr__
/__getattribute__
- anotaciones de funciones (función py3k, se ignoran en este momento, pero se analizan. No sé qué hacer con ellas).
- Los decoradores de clase (característica py3k, también se ignoran, hasta que encuentro un caso de uso, eso no funciona con Jedi)
- Modificaciones de
sys.path
simples / usuales -
isinstance
comprueba si / while / assert