Resposta curta: Não, o IPython não possui esse recurso.
No entanto, com base no meu entendimento dos documentos do bpython, o retrocesso deles não está realmente retrocedendo, está começando de novo e repetindo até um ponto anterior na sessão. Se este é realmente o caso, então no IPython você pode fazer algo que pode ser semelhante, redefinindo e re-executando o histórico:
def rewind(ip, s=''): """attempt to reset IPython to an earlier state implemented by resetting IPython, and replaying the history up to (but not including) the specified index. """ if s: stop = min(int(s), ip.execution_count) else: # backup 1 by default stop = ip.execution_count-1 # fetch the history hist = list(ip.history_manager.get_range(stop=stop)) # reset IPython ip.reset() ip.execution_count=0 # replay the history for _,i,cell in hist: ip.run_cell(cell, store_history=True) # expose this function as %rewind get_ipython().define_magic('rewind', rewind)
Depois, em um momento posterior, chame %rewind 6
e você deverá ter o IPython de volta ao estado anterior à entrada # 6. Esta implementação está longe de ser perfeita, porque eu apenas a juntei (por exemplo, ela não suprimirá tracebacks ou saída para as células reproduzidas), mas deve ser um começo.