Функция в bpython называется перемотка.
Есть ли какие-то похожие клавишные привязки?
Краткий ответ: нет, IPython не имеет этой функции.
Однако, исходя из моего понимания документации bpython, их перемотка на самом деле не отступает, а начинается заново и переигрывается до некоторой точки в начале сеанса. Если это действительно так, то в IPython вы можете сделать что-то похожее, сбросив и повторно запустив историю:
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)
Затем на более позднем этапе вызовите %rewind 6
, и вы должны вернуть IPython в состояние до ввода # 6. Эта реализация далека от совершенства, потому что я просто бросил ее вместе (например, она не будет подавлять обратные вызовы или вывод для воспроизводимых ячеек), но это должно быть началом.