向IPython noteb中显示的python会话自动完成添加建议

2024-05-12 22:48:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试向交互式python选项卡auto-complete添加定制建议。我在互联网上找到了这个玩具的例子

import readline, rlcompleter

addrs = ['angela@domain.com', 'michael@domain.com', 'david@test.com']

class mycompleter(rlcompleter.Completer):
    def completer(self, text, state):
        options = [x for x in addrs if x.startswith(text)]
        try:
            return options[state]
        except IndexError:
            return None

readline.set_completer(mycompleter().completer)
readline.parse_and_bind("tab: complete")

在python中,如果我把它保存在一个模块中,然后他们导入它,那么它在python中的工作非常好。如果我使用%paste魔术将它粘贴到活动会话中,它也可以在IPython中工作。在

但是,我不能让它在IPython笔记本上运行,无论是加载模块还是在单元中运行。我已经找到了ipython文档关于它们对readline模块的扩展,但这并没有帮助。我尝试过从IPCompleter对象继承,并使用rlcompete方法等,但这似乎没有帮助。在

关于如何以在纯python和IPython笔记本中工作的方式将内容添加到自动完成建议中有什么建议吗

谢谢 尼尔

更新: 最后,我正在寻找一种方法来向模块添加功能,以便它可以动态更新会话自动完成列表(对于一组特定函数的args,最好是这样,这样就不会污染建议)。在


Tags: 模块textcomreadlinereturndomainipython建议
1条回答
网友
1楼 · 发布于 2024-05-12 22:48:56

有一种方法可以做到这一点,这不是推荐的方法,但很管用。

def my_matches(test):
    # might want to be smarter here
    return ['angela@domain.com', 'michael@domain.com', 'david@test.com']
ip = get_ipython()
ip.Completer.matchers.append(my_matches)
# it works

旧的方法需要设置钩子,但我没有用过,而且已经很老了 并且可以重构

相关问题 更多 >