Vim Python完成

时间:2011-08-17 18:00:23

标签: python vim omnicomplete

我在使用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开始工作。但现在我知道如何绕过它并不是那么重要。

是否有更多这样的问题,以便我知道将来会发生什么?

2 个答案:

答案 0 :(得分:30)

pythoncomplete相当陈旧且没有维护。

尝试使用Jedi:https://github.com/davidhalter/jedi-vim 它最初是一个改进的pythoncomplete,但现在功能更强大了!

适用于复杂的代码:completion

还有其他功能: enter image description here

列出了所有可能的功能:

  • 内置函数/类支持
  • 复杂的模块/功能/类结构
  • 忽略语法和缩进错误
  • 多次退货/收益
  • 元组赋值/数组索引/字典索引
  • 例外/ with-statement
  • * args / ** kwargs
  • 装饰
  • descriptors - &gt; property / staticmethod / classmethod
  • generators(yield语句)/ iterators
  • 支持一些神奇方法:__call____iter____next____get____getitem____init__
  • 支持list.append,set.add,list.extend等。
  • (嵌套)列表理解/三元表达式
  • 相对进口
  • getattr() / __getattr__ / __getattribute__
  • 功能注释(py3k功能,现在被忽略,但被解析。 我不知道该怎么办。)
  • 类装饰器(py3k功能,也被忽略,直到我找到一个用途 案例,与Jedi不兼容)
  • 简单/通常sys.path修改
  • isinstance检查if / while / assert

答案 1 :(得分:5)

Python是一种令人难以置信的动态语言,不适合完成。那里没有任何真正好的完成。 IMO,在没有它的情况下生活比与其所有问题作斗争更容易。也就是说,python-mode真的太棒了,就像neoascetic说的那样。