Vim Python完成

Gor*_*sel 28 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>"
Run Code Online (Sandbox Code Playgroud)

我没有设置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
Run Code Online (Sandbox Code Playgroud)

问题是如果对导入行进行注释,则完成工作(a.<tab>建议使用getX和pr).但它有导入numpy.random,完成刹车.注意:当我运行代码时,此导入正常工作.

Python完成的先决条件是什么?发生了什么,我该怎么做才能完成Python的完成工作.

因为我(相对)是Vim的新手,所以任何建议都表示赞赏.

编辑: 似乎问题是在导入中使用ab表单.如果我从numpy导入随机,一切都很好.如果这很容易解决,我也想从中工作.但是现在我知道如何绕过它并不是那么重要.

是否有更像这样的不寻常的问题,以便我知道未来会发生什么?

Dav*_*ter 30

pythoncomplete相当陈旧而且没有维护.

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

它适用于复杂的代码:完成

并具有其他功能: 在此输入图像描述

有一个可能的功能列表:

  • 内置函数/类支持
  • 复杂的模块/功能/类结构
  • 忽略语法和缩进错误
  • 多次退货/收益率
  • 元组赋值/数组索引/字典索引
  • 例外/带有陈述
  • *args/**kwargs
  • 装饰
  • descriptors - > property/staticmethod/classmethod
  • 关闭
  • 生成器(yield语句)/迭代器
  • 支持一些魔术方法:__call__,__iter__,__next__, __get__,__getitem__,__init__
  • 支持list.append,set.add,list.extend等.
  • (嵌套)列表推导/三元表达式
  • 相对进口
  • getattr()/ __getattr__/__getattribute__
  • 函数注释(py3k功能,现在被忽略,但被解析.我不知道如何处理它们.)
  • 类装饰器(py3k功能,也被忽略,直到我找到一个用例,不能用于Jedi)
  • 简单/通常的sys.path修改
  • isinstance 检查if/while/assert


Cor*_*son 5

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

  • 是的,python是动态的,但你也可以在运行程序时反省正在运行的程序的所有内容,这样就可以很好地完成它. (3认同)
  • 是的,运行你的程序来完成,听起来是个好主意. (3认同)