Posso refazer / desfazer no shell ipython?

3

Um recurso no bpython chamado rewind.

Existem algumas associações de teclas semelhantes?

    
por iMom0 14.11.2011 / 06:13

1 resposta

4

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.

    
por 14.11.2011 / 08:03