Vim';s omnicompletion失败,并带有“;从「;用Python导入

Vim';s omnicompletion失败,并带有“;从「;用Python导入,python,vim,omnicomplete,import,Python,Vim,Omnicomplete,Import,当有“from”导入而不是普通导入时,Python的Omnicompletion似乎失败了。 例如,如果我有以下两个文件: Test.py: class Test: def method(self): pass main.py: from Test import Test class Test2: def __init__(self): self.x = Test() 如果我尝试为self.x激活omnicompletion。。。上面写着“找不

当有“from”导入而不是普通导入时,Python的Omnicompletion似乎失败了。 例如,如果我有以下两个文件:

Test.py:

class Test:
    def method(self):
        pass
main.py:

from Test import Test

class Test2:
    def __init__(self):
       self.x = Test()
如果我尝试为self.x激活omnicompletion。。。上面写着“找不到模式”。 但是,如果我将导入语句更改为:

import Test
以及self.x声明:

self.x = Test.Test()
然后我就可以按预期使用omnicompletion(例如,它建议使用“方法”)

我正在使用Vim 7.2.245和Python代码完成的默认插件(pythoncomplete)。 我应该设置一些变量吗?或者这种行为是预期的

更新

根据Jared的回答,我偶然发现了一些东西:

Omnicompletion不适用于此:

from StringIO import StringIO

class Test:
    def __init__(self):
        self.x = StringIO()
        self.x.<C-x><C-o>

s = Test()
第一次尝试使用omnicompletion失败,但第二次效果良好。
是的,看起来插件中有一个bug:)

更新:ooh,所以我检查了您的示例,并获得了完整的示例

x = Test()
x.<C-x><C-o>
我完成了。现在,我知道这不完全是你的情况,但它表明pythoncomplete知道“from”

现在是更深入的例子:

from StringIO import StringIO
s = StringIO()
s.<C-x><C-o>
如您所见,这是它处理来自语句的


干杯

所有这些都意味着:不,这不是预期的,你没有做错任何事=)这是一个错误。看起来脚本是在这里维护的:我建议提交一个bug报告。
x = Test()
x.<C-x><C-o>
o = object()
o.x = Test()
o.x.<C-x><C-o>
from StringIO import StringIO
class M:
    pass
s = M()
s.x = StringIO()
s.x.<C-x><C-o>
from StringIO import StringIO
class M: pass
s = M()
s.x = StringIO()
s.x.<C-x><C-o>
from os import path
path.<C-x><C-o>
from StringIO import StringIO
s = StringIO()
s.<C-x><C-o>
            elif token == 'from':                                    
                mod, token = self._parsedotname()                    
                if not mod or token != "import":                     
                    print "from: syntax error..."                    
                    continue                                         
                names = self._parseimportlist()                      
                for name, alias in names:                            
                    loc = "from %s import %s" % (mod,name)           
                    if len(alias) > 0: loc += " as %s" % alias       
                    self.scope.local(loc)                            
                freshscope = False