Vim的omnicompletion失败,“从”进口在Python

Omnicompletion对于Python似乎时,有一个“距离”的进口,而不是一个正常的失败。 举例来说,如果我有这两个文件:

Test.py:

class Test: def method(self): pass

main.py:

from Test import Test class Test2: def __init__(self): self.x = Test()

如果我尝试激活omnicompletion为self.x ......它说:“模式未找到”。 不过,如果我改变import语句:

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.<Cx><Co> s = Test()

但它只是对这样的:

from StringIO import StringIO class Test: def __init__(self): self.x = StringIO() self.x.<Cx><Co> s = Test() sx = StringIO()

唯一的区别是x的重复声明(实际上,它也可以,如果我删除里面的声明__init__

我再次测试我的例子,我认为这个问题是不是“从”进口,而是使用了进口类的另一个类中。 如果我更改文件main.py到:

from Test import Test class Test2: def __init__(self): self.x = Test() self.x.<Cx><Co> y = Test() y.<Cx><Co>

使用omnicompletion第一次尝试失败,但第二个能正常工作。 所以是的,看起来像在插件中的错误:)

--------------解决方案-------------

更新:哦,让我检查你的榜样,我也得到完成的

x = Test()
x.<Cx><Co>

但不是

o = object()
ox = Test()
ox<Cx><Co>

...我会做一些挖掘

更新2: 奇爱博士复仇

而且...这是它获得的怪异。

from StringIO import StringIO
class M:
pass
s = M()
sx = StringIO()
sx<Cx><Co>

完成。 但是这

from StringIO import StringIO
class M: pass
s = M()
sx = StringIO()
sx<Cx><Co>

你有没有语法赶上什么区别? -只是一个小空格

然而,它打破完成。 所以这绝对是一个错误的解析在那里的地方( 为什么他们不只是使用ast模块,我不知道...)

[更新结束]

乍一看,我不能重现你的问题; 这是我的测试文件:

from os import path
path.<Cx><Co>

我也得到完成。 现在,我知道这是不完全你的情况,但它表明pythoncomplete知道“从”。

而现在的更深入的例子:

from StringIO import StringIO
s = StringIO()
s.<Cx><Co>

还有......完成! 你可以尝试这个例子看看它是否适用于内置模块的吗?如果是这样的话,你应该检查路径...

如果仍然不工作,而你因为某些周围挖,看看线#555 pythoncomplete.vim的[在/usr/share/vim/vim72/autoload/pythoncomplete.vim在我的Ubuntu机】:

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

正如你所看到的,这是它处理from语句。

干杯

分类:蟒蛇 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.466 (s). 10 q(s)