Deshacer en modo de inserción

23

¿Hay un comando para deshacer la última operación realizada en modo de inserción?

Acabo de pegar texto del registro incorrecto usando <C-r>, y tengo dos opciones:

  1. Elimina a mano lo que acabo de pegar y comienza de nuevo.
  2. Cambie al modo normal, presione uy pierda el texto que escribí antes de presionar <C-r>.

¿Hay una mejor manera?

zool
fuente

Respuestas:

16

Vim ofrece una capacidad limitada para especificar el alcance de un cambio Ctrl-G uque no se puede deshacer con el comando, que rompe la secuencia de deshacer. Ver

:help i_CTRL-G_u

En su caso, la solución sería reasignar <C-R>así:

:inoremap <C-R> <C-G>u<C-R>

Luego, al escribir <C-O>u, deshacerá solo los cambios realizados desde que escribió <C-R>. Ver

:help i_CTRL-O
garyjohn
fuente
1
Eso es genial, no sabía sobre este comando. Hay un retraso bastante largo entre escribir <C-O>uy ver el resultado en la pantalla (aproximadamente 4 segundos), ¿alguna idea de cómo podría deshacerme de eso?
zool
También me di cuenta de eso. No lo sé; Trataré de averiguarlo.
garyjohn
Hola, ¿es posible que quisieras decir <CR> (retorno de carro) en lugar de <CR> (ctrl-r)?
Derwent
No. La pregunta original tenía que ver con el comportamiento de <CR>, así que eso es lo que usa el mapeo. Sin embargo, puede reemplazar <CR> con <CR> en esa asignación para que la secuencia de deshacer sea interrumpida por un <CR>. Se pueden encontrar más ejemplos en :help i_CTRL-G_u.
garyjohn
6

Desde el modo de inserción:

  1. Si su texto pegado es más pequeño que una línea (que es lo que su segundo punto implica), simplemente presione <C-u>para eliminar todos los caracteres antes del cursor en la línea actual.

  2. Si el texto pegado es más de una línea, su segunda solución sería trabajar mejor, con las siguientes adaptaciones: <C-o>u.

Ambos puntos anteriores comenzarán y permanecerán, o terminarán, en modo de inserción; en realidad son lo mismo con sus soluciones propuestas, solo que se acortaron :)

VanLaser
fuente
6

Puede intentar <C-w>(elimina una palabra a la izquierda) o <C-u>(borrar caracteres antes del cursor cuando se presiona una vez, elimina el salto de línea cuando se presiona una segunda vez). Ver :help i_CTRL-Wy :help i_CTRL-U.

Si pega mucho de un registro, por supuesto, es más rápido deshacer sus cambios, puede usar insert-normal-mode con <C-o>eso (ejecute un comando de modo normal y luego regrese al modo de inserción).

En general, es útil dividir las ediciones en pequeños trozos volviendo a menudo al modo normal, de modo que tenga posibilidades de deshacer con precisión.

cbaumhardt
fuente