Interrompre la séquence d'annulation en mode normal

Sep 08 2020

Question: Y a - t-il quelque chose qui fonctionne de la même manière que i_CTRL-G_u , mais en mode normal ?

Cela serait utile dans les mappages (comme nnoremap), car (je pense, mais corrigez-moi) en mode normal, si vous tapez simplement des commandes (par rapport à une séquence mappée sur une seule touche), chaque commande compte comme un bloc d'annulation distinct.

Exemple concret : j'essaie de résoudre cet exercice , de Learn Vimscript the Hard Way.

C'est ce que j'ai proposé et cela semble fonctionner:

:nnoremap <leader>d ddi<C-G>u<esc>dd

Bien que cela fonctionne, cela semble un peu hackish, passer en mode insertion juste pour briser la séquence d'annulation , alors je me demandais si c'était possible sans passer en mode insertion.

Bien sûr, j'ai déjà essayé la variante suivante, mais elle ne fait que supprimer une seule ligne, il semble donc que la <C-G>partie termine en quelque sorte la séquence:

:nnoremap <leader>d dd<C-G>udd

Réponses

3 JakeGrossman Sep 08 2020 at 22:24

Faire :let &ul=&ulinterrompt la séquence d'annulation. Ceci est documenté sous :h :undojoin:

La définition de la valeur «undolevels» annule également l'annulation. Même lorsque la nouvelle valeur est égale à l'ancienne valeur.

En utilisant la méthode décrite, vous pouvez effectuer les opérations suivantes:

nnoremap <leader>d dd:let &ul=&ul<CR>dd