L'omni-complétion pour Python semble échouer lorsqu'il y a une importation "de" au lieu d'une importation normale. Par exemple, si j'ai ces deux fichiers:L'omnidirection omniprésente de Vim échoue avec les importations "de" en Python
test.py:
class Test:
def method(self):
pass
main.py:
from Test import Test
class Test2:
def __init__(self):
self.x = Test()
Si je tente d'activer omnicompletion pour self.x ... il est dit "Motif non trouvé". Cependant, si je change la déclaration d'importation:
import Test
et la déclaration de self.x à:
self.x = Test.Test()
alors je suis en mesure d'utiliser omnicompletion comme prévu (il suggère "méthode", par exemple). J'utilise Vim 7.2.245 et le plugin par défaut pour l'achèvement de code Python (pythoncomplete). Dois-je définir une variable? Ou ce comportement est-il attendu?
Mise à jour:
Sur la base de la réponse de Jared, j'ai découvert quelque chose par hasard:
Omnicompletion ne fonctionne pas sur ce point:
from StringIO import StringIO
class Test:
def __init__(self):
self.x = StringIO()
self.x.<C-x><C-o>
s = Test()
Mais fonctionne sur ce point:
from StringIO import StringIO
class Test:
def __init__(self):
self.x = StringIO()
self.x.<C-x><C-o>
s = Test()
s.x = StringIO()
La seule différence est la redeclaration de x (en fait, cela fonctionne également si je supprime la déclaration à l'intérieur __init__
).
J'ai encore testé mon exemple, et je pense que le problème n'est pas l'importation "de", mais l'utilisation de la classe importée dans une autre classe. Si je change le fichier main.py
à:
from Test import Test
class Test2:
def __init__(self):
self.x = Test()
self.x.<C-x><C-o>
y = Test()
y.<C-x><C-o>
La première tentative d'utilisation omnicompletion échoue, mais le second fonctionne très bien. Alors yep, ressemble à un bug dans le plugin :)
Tout cela revient à dire: non, ce n'est pas prévu, et vous ne faites rien de mal =) il y a un bug. On dirait que le script est maintenu ici: http://www.vim.org/scripts/script.php?script_id=1542 Je suggère de déposer un rapport de bogue. –