Могу ли я повторить / отменить в оболочке ipython?

1029
iMom0

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

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

3

1 ответ на вопрос

4
minrk

Краткий ответ: нет, IPython не имеет этой функции.

Однако, исходя из моего понимания документации bpython, их перемотка на самом деле не отступает, а начинается заново и переигрывается до некоторой точки в начале сеанса. Если это действительно так, то в IPython вы можете сделать что-то похожее, сбросив и повторно запустив историю:

перемотка назад (ip, s = ''): "" "попытка сбросить IPython в более раннее состояние  реализовано путем сброса IPython и воспроизведения история до (но не включая) указанного индекса. «»» если с: stop = min (int (s), ip.execution_count) еще: # резервная копия 1 по умолчанию stop = ip.execution_count-1 # получить историю hist = list (ip.history_manager.get_range (stop = stop)) # сбросить IPython ip.reset () ip.execution_count = 0 # воспроизведение истории для _, я, ячейка в истории: ip.run_cell (cell, store_history = True)  # выставить эту функцию как% rewind get_ipython (). define_magic («перемотка», перемотка) 

Затем, позже, позвоните %rewind 6, и вы должны вернуть IPython в состояние до ввода # 6. Эта реализация далека от совершенства, потому что я просто бросил ее вместе (например, она не будет подавлять обратные вызовы или вывод для воспроизводимых ячеек), но это должно быть началом.