1

現在のpython#completeは、次のimportステートメントを含むPythonスクリプトをサポートしていません。

from . import module
from .modulea import abc

vimに「from:syntaxerror...」と表示されます。

誰かがそれを解決するための手がかりを持っていますか?

今日は、pythoncompleteスクリプトを実行して、この問題を自分で解決するために時間を費やしています。_parsedotname関数をハックすることで解決できました。'。'の変換に関する問題が原因で、ハッキングがどれほど移植可能かわかりません。絶対パスになりますが、私のマシンでは機能します。以下は私の変更点です(ええ、コードフローを理解するために使用する印刷ステートメントがたくさんあります...)

def _parsedotname(self,pre=None):
    #returns (dottedname, nexttoken)
    name = []
    absolute_relative_path = False
    if pre is None:
        tokentype, token, indent = self.next()
        #print tokentype, token, indent
        if tokentype == 51 and token == '.':
            import os
            import sys
            #print os.path.abspath(os.curdir)
            fullpath = os.path.abspath(os.curdir)
            paths = fullpath.split(os.path.sep) 
            n_ = -1
            #print fullpath
            pyexeindex = sys.path.index(os.path.dirname(sys.executable))
            #print sys.path[pyexeindex:]
            while fullpath not in sys.path[pyexeindex:]:
                fullpath = os.path.sep.join(paths[:n_])
                #print fullpath
                n_ -= 1
            if fullpath == '':
                return ('', token)
            absolute_relative_path = True
            name = '.'.join(paths[n_+1:])
            #print name
        elif tokentype != NAME and token != '*':
            #print 'should not here'
            return ('', token)
    else: token = pre
    if '.' in name:
        name = name.split('.')
    else:
        name.append(token)

    while True:
        if not absolute_relative_path:
            tokentype, token, indent = self.next()
            if token != '.': break
        tokentype, token, indent = self.next()
        if not absolute_relative_path:
            if tokentype != NAME: break
        else:
            absolute_relative_path = False
            if tokentype == NAME and token == 'import':
                return (".".join(name), token)
        name.append(token)
    return (".".join(name), token)

今、それは両方のために働いた:

from . import module
from .moduleA import moduleB
4

1 に答える 1

1

私はあなたがviminternalを使用していると思いますpythoncomplete

私がここに書いたように:vimpythoncompleteを使用したPythondocstringは、自分のクラス関数の改行を表示しません

pythoncompleteは非常に単純なツールであり、ステートメントを実行することによってほとんどの完了を実行しますimport(ちなみにこれはかなり危険です)。私は現在それをやろうとしているので、それを解決することはおそらく最善のアイデアではありません(良いPythonオートコンプリートを書く)。

しかし、私のバージョンは、あと1、2か月であなたが望むことを実行する準備ができているとは思いませんが、それはすでに本当に遠いです。準備ができたらお知らせします。

于 2012-05-07T19:10:31.167 に答える