Come posso ottenere un comportamento di annullamento in Evil simile a quello di Vim?


17

Il comportamento di annullamento predefinito in Evil è troppo grossolano perché considera tutto ciò che accade tra l'accesso alla modalità di inserimento e lasciarlo come un'operazione di modifica. Quando si inserisce un intero paragrafo di testo durante un inserimento e quindi si esegue l'annullamento, l'intero paragrafo viene rimosso. Al contrario, Vim avvia una nuova unità di annullamento ogni volta che si sposta il cursore in modalità di inserimento in modo diverso dall'immissione di testo.

Il male ha una variabile di personalizzazione che può essere utilizzata per ottenere una cronologia degli annullamenti più dettagliata:

(setq evil-want-fine-undo t)

Con questa impostazione, Evil avvia una nuova unità di annullamento quando il cursore viene spostato in modalità inserimento, proprio come fa Vim. Tuttavia, questa impostazione fa anche confusione con la gestione dell'operazione di sostituzione: se si sostituisce una parola utilizzando cw, è necessario annullare due volte per ripristinare la parola originale: una volta per rimuovere la nuova parola e una volta per reinserire la parola originale. Questo non è coerente con Vim e non ha molto senso perché sostituire dovrebbe essere atomico.

La domanda: come posso configurare Evil e undo-tree per ottenere il comportamento di annullamento di Vim?


Inoltra un problema qui: bitbucket.org/lyro/evil/issues?status=new&status=open (Il male generalmente considera le divergenze da vim come bug).
shosti,

@shosti, hai ragione, ma l'esistenza della variabile di personalizzazione suggerisce che hanno deciso di fare un'eccezione a quella regola nel caso di specie. Presenterò comunque un bug. Vediamo cosa succede.
tmalsburg,

Penso che la variabile di personalizzazione sia in realtà quella di ottenere più comportamenti di annullamento simili a quelli di Emacs (Emacs non esegue operazioni atomiche allo stesso modo di VIM).
shosti,

Risposte:


10

Poiché @shosti ha sottolineato che Evil considera la deviazione dal comportamento di Vim come bug, ho presentato un bug e uno degli autori di Evil ha aggiunto un nuovo valore possibile per evil-want-fine-undo:

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

Con questa impostazione, si ottengono nuove unità di annullamento quando si sposta il cursore in modalità inserimento, ma le operazioni di sostituzione vengono annullate in un solo passaggio. Per quanto ne so, è coerente con Vim. Vedi qui per i dettagli.


2
Questa soluzione non è più consigliata perché l' 'fineimpostazione è stata deprecata.
tmalsburg,

1

Secondo la descrizione della variabile (vedi C-h v evil-want-fine-undo) il valore finenon è più supportato a causa di un comportamento incoerente.

Mentre uso annulla per annullare errori di battitura o l'impostazione menzionata ha aiutato la mia assegnazione.

(setq evil-want-fine-undo t) 

Ho avuto errori Annullare le difficoltà in org-tabella di modifica formula, dal momento che non c'è bisogno di lasciare la modalità di inserimento, se si desidera cambiare *Edit Forumlas*con C-'.


Grazie per l'aggiornamento. Ho richiesto la riapertura del problema su Bitbucket.
tmalsburg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.