¿Cómo determina vim el tamaño de una sola "edición" cuando se usa "u" y "CTL-R"?


17

Cuando uso uo CTL-Rpara deshacer o volver a hacer una edición en vim, parece que alteré fragmentos de texto, no solo la pulsación de tecla más reciente.

¿Qué determina el tamaño del fragmento que se considera una sola edición?

Respuestas:


19

Estás buscando la definición de undo-blocks.

De :h undo-blocks:

Un comando de deshacer normalmente deshace un comando escrito, sin importar cuántos cambios realice ese comando. Esta secuencia de cambios que no se pueden deshacer forma un bloque de deshacer. Por lo tanto, si la (s) tecla (s) tipeada (s) llaman a una función, todos los comandos en la función se deshacen juntos.

Se utiliza el mismo bloque para redo. De :h redo:

Se recuerdan los últimos cambios. Puede usar los comandos de deshacer y rehacer de arriba para revertir el texto a como estaba antes de cada cambio. También puede aplicar los cambios nuevamente, recuperando el texto antes de deshacer.


44
También puede separar manualmente un solo bloque de deshacer con el comando CTRL-G uen modo de inserción, lo cual es útil si tiene algunas macros de modo de inserción.
fruglemonkey

8

Modal de edición de Vim es a menudo visto como un operador (por ejemplo c, d, ...) que se aplica sobre un movimiento (por ejemplo iw, w, }, ...). Como un producto maravilloso, Vim se deshace en trozos. Mientras que otros editores tienen que hacer algunas suposiciones para convertir muchos pequeños deshacer en bloques de deshacer, Vim hace esto naturalmente. Otro efecto secundario es que le da un operador de repetición .(también conocido como el comando de punto).

Su pregunta menciona específicamente las pulsaciones de teclas, por lo que supongo que desea saber cómo deshacer pequeños cambios en el modo de inserción. La respuesta es que esto no es "la forma Vim". "The Vim Way" significa que estará en modo de inserción para ráfagas cortas a la vez. Esto significa que cuando se cometen errores en el modo de inserción, a menudo simplemente sale del modo normal y corrige el texto o simplemente deshace uy reescribe el texto.

A veces es necesario dividir un bloque de deshacer mientras está en modo de inserción. Esto se puede lograr a través del <c-g>umodo de inserción. Ver :h :undojy :h undo-blockspara más información.

Para obtener más ayuda, sugiero lo siguiente:

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

También hay algunos screencasts sobre este tema:


"Chunky deshacer" - mejor descripción que he visto.
Matt Parker

6

Puede pensarlo de esta manera también: cada vez que vaya al modo de inserción para editar texto y presione Esc, se formará un bloque. Si intenta deshacer ese bloque, irá a la misma posición antes de ingresar al modo de inserción.

Por lo tanto, puede "guardar" sus cambios simplemente saliendo del modo de inserción de vez en cuando: digamos que vaya al modo de inserción y escriba una función. Puede continuar codificando e ir a la siguiente función; sin embargo, a veces es preferible volver al modo normal y cambiar al modo de inserción nuevamente. De esa manera, puede tener su código estructurado de una manera simple y si necesita retroceder puede saber en qué posición terminará.

Nota: si usa flechas para moverse, es como si presionara Esc+ [ hjkl]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.