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

来源:互联网 发布:mac系统消失 编辑:程序博客网 时间:2024/05/21 09:31

因为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)