当存在“来自”导入而不是正常导入时,Python 的 Omnicompletion 似乎失败了。例如,如果我有这两个文件:
测试.py:
class Test:
def method(self):
pass
主要.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)。我应该设置一些变量吗?或者这种行为是预期的?
更新:
根据贾里德的回答,我偶然发现了一些东西:
Omnicompletion 对此不起作用:
from StringIO import StringIO
class Test:
def __init__(self):
self.x = StringIO()
self.x.<C-x><C-o>
s = Test()
但适用于此:
from StringIO import StringIO
class Test:
def __init__(self):
self.x = StringIO()
self.x.<C-x><C-o>
s = Test()
s.x = StringIO()
唯一的区别是 x 的重新声明(实际上,如果我删除里面的声明,它也可以工作__init__
)。
我再次测试了我的示例,我认为问题不在于“从”导入,而是在另一个类中使用了导入的类。如果我将文件更改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>
第一次尝试使用omnicompletion 失败,但第二次工作正常。所以是的,看起来像插件中的一个错误:)