python vim omnicomplete

python jedi



¿Hay alguna manera de hacer que python omnicomplete trabaje con módulos que no sean del sistema en vim? (6)

Lo único que puedo hacer con Python omnicomplete para trabajar son los módulos del sistema. No recibo ayuda con los módulos en mi sitio: paquetes o módulos en los que estoy trabajando actualmente.


Acabo de encontrarme con esto en Python reddit esta noche: PySmell . Parece lo que estás buscando.

PySmell es un asistente de finalización IDE de Python.

Intenta analizar estáticamente el código fuente de Python, sin ejecutarlo, y genera información sobre la estructura de un proyecto que las herramientas IDE pueden usar.


Creo que después del script de pydiction . Te permite agregar tus propias cosas y paquetes de sitios para completar todo.

Mientras estás en ello, agrega lo siguiente a tu archivo python.vim ...

set iskeyword+=.

Esto le permitirá completar automáticamente las funciones del paquete, por ejemplo, si ingresa ...

os.path.

y luego [CTRL] [N], obtendrá una lista de las funciones de os.path.


Completo mis propios módulos en mi PYTHONPATH o paquetes de sitio. No estoy seguro de qué versión del script pythoncomplete.vim está utilizando, pero es posible que desee asegurarse de que sea la última.

EDITAR: Aquí hay algunos ejemplos de lo que estoy viendo en mi sistema ...

Este archivo (mymodule.py), lo meto en un directorio en PYTHONPATH, y luego en site-packages. Ambas veces pude obtener la captura de pantalla a continuación.

myvar = ''test'' def myfunction(foo=''test''): pass class MyClass(object): pass

captura de pantalla http://i437.photobucket.com/albums/qq96/jmcantrell/screenshot.png


Una vez que generé ctags para uno de mis paquetes de sitio, comenzó a trabajar para ese paquete, así que supongo que la función omnicomplete depende de ctags para módulos que no sean sys.

EDITAR: No es cierto en absoluto.

Aquí está el problema - pruebas pobres de mi parte - omnicompleto estaba trabajando para partes de mi proyecto, pero no la mayor parte.

El problema es que estoy trabajando en un proyecto django, y para importar django.db, necesitas tener una variable de entorno establecida. Como no podía importar django.db, cualquier clase heredada de django.db, o cualquier módulo que importara una clase heredada de django.db, no se completaría.



Consejo para solucionar problemas: verifique que el módulo que está intentando omni-completar puede ser importado por VIM. Tenía un Python sintácticamente correcto que no le gustaba a VIM:

:python import {module-name} Traceback (most recent call last): File "<string>", line 1, in ? File "modulename/__init__.py", line 9 class empty_paranthesis(): ^ SyntaxError: invalid syntax

Caso-en-punto, eliminar el paréntesis de mi definición de clase permitió a VIM importar el módulo, y posteriormente OmniComplete en ese módulo comenzó a funcionar.