O comportamento padrão de desfazer no Evil é muito granular, porque considera qualquer coisa entre o modo de inserção e o de saída como uma operação de edição. Quando você insere um parágrafo inteiro do texto durante uma inserção e executa desfazer, o parágrafo inteiro é removido. Por outro lado, o Vim inicia uma nova unidade de desfazer sempre que você move o cursor no modo de inserção por outros meios que não sejam a inserção de texto.
O Evil possui uma variável de personalização que pode ser usada para obter um histórico de desfazer mais refinado:
(setq evil-want-fine-undo t)
Com essa configuração, o Evil inicia uma nova unidade de desfazer quando o cursor é movido no modo de inserção, assim como o Vim. No entanto, essa configuração também interfere na maneira como a operação de substituição é manipulada: se você substituir uma palavra usando cw
, precisará desfazer duas vezes para restaurar a palavra original: uma para remover a nova palavra e outra para reinserir a palavra original. Isso é inconsistente com o Vim e não faz muito sentido, pois a substituição deve ser atômica.
A pergunta: como posso configurar o mal e desfazer a árvore para obter o comportamento de desfazer do Vim?