我可以在 ipython shell 中重做/撤消吗?

我可以在 ipython shell 中重做/撤消吗?

bpython 中有一个称为 rewind 的功能。

是否有一些类似的按键绑定?

答案1

简短回答:不,IPython 没有这个功能。

但是,根据我对 bpython 文档的理解,它们的倒带实际上并不是倒退,而是重新开始并重播到会话中较早的某个时间点。如果确实如此,那么在 IPython 中,您可以通过重置并重新运行历史记录来执行类似操作:

def rewind(ip,s =''):
    “”“尝试将 IPython 重置为较早的状态

    通过重置 IPython 并重放
    历史记录直至(但不包括)指定的索引。
    “””
    如果:
        停止 = 最小值(int(s),ip.execution_count)
    别的:
        # 默认备份 1
        停止 = ip.执行计数-1
    # 获取历史记录
    hist = 列表(ip.history_manager.get_range(stop=stop))
    # 重置 IPython
    ip.重置()
    ip.执行计数=0
    # 重播历史
    对于 _,i,hist 中的单元格:
        ip.run_cell(单元格,store_history=True)

# 将此函数公开为 %rewind
get_ipython().define_magic('倒带',倒带)

然后在稍后调用%rewind 6,您应该让 IPython 回到输入 #6 之前的状态。这个实现远非完美,因为我只是把它拼凑在一起(例如,它不会抑制回溯或重放单元的输出),但它应该是一个开始。

相关内容