我在使用Vim和Python时遇到了麻烦。 事实上,我很困惑这是如何工作的。
我在Windows 7上使用通用gvim 7.3(使用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。&lt; tab&gt;建议使用getX和pr)。但它有导入numpy.random,完成刹车。 注意:当我运行代码时,此导入正常工作。
Python完成的先决条件是什么? 发生了什么,我该怎么做才能完成Python的工作。
由于我(相对)是Vim的新手,所以任何建议都表示赞赏。
修改 似乎问题是在导入中使用a.b表单。如果我从numpy导入随机,一切都很好。如果这很容易解决,我想从a.b开始工作。但现在我知道如何绕过它并不是那么重要。
是否有更多这样的问题,以便我知道将来会发生什么?
答案 0 :(得分:30)
pythoncomplete相当陈旧且没有维护。
尝试使用Jedi:https://github.com/davidhalter/jedi-vim 它最初是一个改进的pythoncomplete,但现在功能更强大了!
适用于复杂的代码:
还有其他功能:
列出了所有可能的功能:
__call__
,__iter__
,__next__
,
__get__
,__getitem__
,__init__
getattr()
/ __getattr__
/ __getattribute__
sys.path
修改isinstance
检查if / while / assert 答案 1 :(得分:5)
Python是一种令人难以置信的动态语言,不适合完成。那里没有任何真正好的完成。 IMO,在没有它的情况下生活比与其所有问题作斗争更容易。也就是说,python-mode真的太棒了,就像neoascetic说的那样。