3

Функция в bpython называется перемотка.

Есть ли какие-то похожие клавишные привязки?

1 ответ1

5

Краткий ответ: нет, 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. Эта реализация далека от совершенства, потому что я просто бросил ее вместе (например, она не будет подавлять обратные вызовы или вывод для воспроизводимых ячеек), но это должно быть началом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .