私はVimとPython完了に問題があります。実際、これがどのように機能するのか完全に混乱しています。
私は一般的なgvim7.3をWindows7(python/dyn付き)で使用しています。SuperTabプラグインを使用しています。その中にはPython固有のものもあり、vimrcで次の設定を行っています。
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を提案します)。しかし、インポートnumpy.randomがあり、完了がブレーキダウンします。注:このインポートは、コードを実行すると正常に機能します。
Python完了の前提条件は何ですか?何が起こっているのでしょうか。Pythonで完了を機能させるにはどうすればよいですか。
私は(比較的)Vimに慣れていないので、どんな提案でも大歓迎です。
EDIT:問題はインポートでa.bフォームを使用することにあるようです。 numpy import randomから行う場合、すべて問題ありません。これを修正するのがかなり簡単な場合は、a.bも機能させたいと思います。しかし、今ではそれを回避する方法がわかったので、それほど重要ではありません。
将来何が起こっているのかを知るために、このようなもっと珍しい問題がありますか?
pythoncompleteはかなり古く、保守されていません。
Jediを使用してみてください: https://github.com/davidhalter/jedi-vim 元々は改良されたpythoncompleteでしたが、今でははるかに強力になっています!
複雑なコードで機能します。
そして、追加機能があります:
可能なすべての機能のリストがあります。
__call__
_、___iter__
_、___next__
_、___get__
_、___getitem__
_、___init__
_getattr()
/___getattr__
_/___getattribute__
_sys.path
_変更isinstance
はif/while/assertをチェックします信じられないほど動的な言語であるPythonは、完成には向いていません。そこに本当に良い完成はありません。すべての問題、IMOと戦うよりも、それなしで生きる方が簡単です。そうは言っても、ネオアスセティックが言ったように、 python-mode は本当に素晴らしいです。