31

Vim と Python の補完に問題があります。実際、私はこれがどのように機能するのか完全に混乱しています。

Windows 7(python/dynを使用)で一般的なgvim 7.3を使用しています

au FileType python set omnifunc=pythoncomplete#Complete
let g:SuperTabDefaultCompletionType = "context"
let g:SuperTabContextDefaultCompletionType = "<c-n>"

PYTHONPATH 環境変数を設定しませんでした。

システムモジュールの補完は正常に機能します。

最初は、システム以外のコードではまったく機能しないと思っていましたが、そうではありません。何が起こっているかは、次のコードで最もよく示されています。

import numpy.random   # if this line is commented completion in last line works

class C(object):
    def __init__(self, x_):
        self.x=x_

    def getX(self):
        return self.x

    def pr(self):
        print 'ok'

a=C(10)  # nothing changes if I put C() instead, even though it would be wrong
a.  # here is completion in question

問題は、インポート行がコメント化されている場合、補完が機能することです (a.<tab> は getX と pr を示唆しています)。しかし import numpy.random があると、補完が壊れます。注: このインポートは、コードを実行すると正常に機能します。

Python を完了するための前提条件は何ですか? 何が起こっているのか、Python で補完を行うにはどうすればよいのか。

私は (比較的) Vim に慣れていないので、どんな提案でも大歓迎です。

編集: インポートで ab フォームを使用することに問題があるようです。numpy import random から行うと、すべて問題ありません。これがかなり簡単に修正できる場合は、ab も機能させたいと思います。しかし、それを回避する方法を知った今、それはそれほど重要ではありません。

今後何が起こるかを知るために、このような異常な問題はありますか?

4

2 に答える 2

30

pythoncomplete はかなり古く、メンテナンスされていません。

Jedi を使用してみてください: https://github.com/davidhalter/jedi-vim 元々は pythoncomplete の改良版でしたが、現在ははるかに強力です。

複雑なコードで機能します。完了

さらに、次の追加機能があります。 ここに画像の説明を入力

可能なすべての機能のリストがあります。

  • 組み込み関数/クラスのサポート
  • 複雑なモジュール / 関数 / クラス構造
  • 構文エラーとインデント エラーを無視します
  • 複数の返品 / 利回り
  • タプルの割り当て / 配列のインデックス付け / 辞書のインデックス付け
  • 例外 / with ステートメント
  • *args / **kwargs
  • デコレータ
  • 記述子 -> プロパティ / 静的メソッド / クラスメソッド
  • 閉鎖
  • ジェネレーター (yield ステートメント) / イテレーター
  • いくつかの魔法のメソッドのサポート: __call__, __iter__, __next__, __get__,__getitem____init__
  • list.append、set.add、list.extend などのサポート。
  • (ネストされた) リスト内包表記 / 三項式
  • 相対輸入
  • getattr()/ __getattr__/__getattribute__
  • 関数の注釈 (py3k の機能は現在無視されていますが、解析中です。どうすればよいかわかりません。)
  • クラス デコレータ (py3k 機能も無視されます。Jedi では機能しないユース ケースが見つかるまで)
  • 単純な/通常のsys.path変更
  • isinstanceif/while/asss をチェックします
于 2012-10-14T18:51:00.973 に答える
5

信じられないほど動的な言語である Python は、完成には向いていません。なかなか完成度の高いものはありません。すべての問題と戦うよりも、それなしで生きる方が簡単です.IMO. そうは言っても、ネオアセティックが言ったように、 python-modeは本当に素晴らしいです。

于 2012-05-30T10:52:30.137 に答える