Comment puis-je obtenir un comportement d'annulation dans Evil similaire à celui de Vim?

17

Le comportement d'annulation par défaut dans Evil est trop grossier car il considère tout ce qui se passe entre le passage en mode d'insertion et le laisser comme une seule opération d'édition. Lorsque vous entrez un paragraphe entier de texte lors d'une insertion, puis exécutez l'annulation, le paragraphe entier est supprimé. Contrairement à cela, Vim démarre une nouvelle unité d'annulation chaque fois que vous déplacez le curseur en mode insertion par d'autres moyens que la saisie de texte.

Evil a une variable de personnalisation qui peut être utilisée pour obtenir un historique d'annulation plus précis:

(setq evil-want-fine-undo t)

Avec ce paramètre, Evil démarre une nouvelle unité d'annulation lorsque le curseur est déplacé en mode insertion, tout comme Vim. Cependant, ce paramètre perturbe également la façon dont l'opération de remplacement est gérée: si vous remplacez un mot à l'aide cw, vous devez annuler deux fois pour restaurer le mot d'origine: une fois pour supprimer le nouveau mot et une fois pour réinsérer le mot d'origine. Cela n'est pas cohérent avec Vim et n'a pas beaucoup de sens car replace doit être atomique.

La question: Comment puis-je configurer Evil et undo-tree afin d'obtenir le comportement d'annulation de Vim?

tmalsburg
la source
Déposez un problème ici: bitbucket.org/lyro/evil/issues?status=new&status=open (Evil considère généralement les divergences par rapport à vim comme des bogues).
shosti
@shosti, vous avez raison mais l'existence de la variable de personnalisation suggère qu'ils ont décidé de faire une exception à cette règle dans le cas présent. Je vais quand même déposer un bug. Voyons ce qui se passe.
tmalsburg
Je pense que la variable de personnalisation est en fait d'obtenir un comportement d'annulation plus proche d'Emacs (Emacs ne fait pas d'opérations atomiques de la même manière que vim).
shosti
Voici le nouveau numéro: bitbucket.org/lyro/evil/issue/444/…
tmalsburg

Réponses:

10

Puisque @shosti a souligné que Evil considère la déviation du comportement de Vim comme des bogues, j'ai déposé un bogue et l'un des auteurs d'Evil a ajouté une nouvelle valeur possible pour evil-want-fine-undo:

(setq evil-want-fine-undo 'fine)

Avec ce paramètre, vous obtenez de nouvelles unités d'annulation lorsque vous déplacez le curseur en mode insertion, mais les opérations de remplacement sont annulées en une seule étape. Pour autant que je sache, cela est cohérent avec Vim. Voir ici pour plus de détails.

tmalsburg
la source
2
Cette solution n'est plus recommandée car le 'fineparamètre est obsolète.
tmalsburg
1

Selon la description de la variable (voir C-h v evil-want-fine-undo), la valeur finen'est plus prise en charge en raison d'un comportement incohérent.

Comme j'utilise annuler pour annuler les fautes de frappe ou le paramètre mentionné a aidé mon attribution.

(setq evil-want-fine-undo t) 

J'ai eu du mal à annuler les erreurs lors de la modification de la formule de l'organigramme, car vous n'avez pas à quitter le mode d'insertion si vous souhaitez passer à *Edit Forumlas*avec C-'.

Jörn Reimerdes
la source
Merci pour la mise à jour. J'ai demandé que le problème sur Bitbucket soit rouvert.
tmalsburg