pythoncomplete补丁二——支持当前文件中自定义类的代码提示

因为pythoncomplete是依靠exec一句句执行原文件中的代码然后进行代码提示的,所以就需要所有用到的对象都必须被import进来。所以如果你在当前原文件中定义一个类,然后就创建实例是没有提示的。例如:

class Foo(object):

    name = 'lucifer'

f = Foo()

f.这里会失败

解决的方法很简单就是手动导入这个类,比如我们的原文件名字叫tt.py,那么就加入这句:from tt import Foo,代码提示就能正常工作了。因此补丁也很简单。打开autoload下的pythoncomplete.vim文件,在python << PYTHONEOF下面加入

import vim

import os, re

然后在class Completer(object):前面加入以下两句用于获取当前文件的文件名

 

filename = os.path.basename(vim.buffers[0].name)

filename = filename[0:-3]

再在函数    def evalsource(self,text,line=0):中接着上次增加的namespace后面加入

        if not namespace:

            for item in src.split('/n'):

                if item.startswith('from') or item.startswith('import'):

                    namespace.append(item)

            # 获取当前文件中定义的class名称

                if item.startswith('class') and item.endswith(':'):

                    regex = re.compile(r'^class/s+(?P<name>.+?)/(.+?/):$')

                    matchs = regex.findall(item)

                    if len(matchs):

                        name = matchs[0]

                        from_import = 'from %s import %s' % (filename, name)

                        namespace.append(from_import)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值