通常のインポートではなく「from」インポートがある場合、PythonのOmnicompletionは失敗するようです。たとえば、次の2つのファイルがある場合:
Test.py:
class Test:
def method(self):
pass
main.py:
from Test import Test
class Test2:
def __init__(self):
self.x = Test()
self.xのオムニコンプリーションをアクティブにしようとすると...「パターンが見つかりません」と表示されます。ただし、インポートステートメントを次のように変更すると、次のようになります。
import Test
およびself.x宣言は次のとおりです。
self.x = Test.Test()
そうすれば、期待どおりにオムニコンプリーションを使用できます(たとえば、「メソッド」を提案します)。
私はVim7.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()
しかし、これに取り組んでいます:
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__
)。
例をもう一度テストしましたが、問題は「from」インポートではなく、インポートされたクラスを別のクラス内で使用することだと思います。ファイル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>
オムニコンプリーションを使用する最初の試みは失敗しますが、2番目の試みは正常に機能します。そうそう、プラグインのバグのように見えます:)