Respuestas:
El `.
comando lo llevará a su último cambio.
El `
va a una marca, y .
es una marca "especial" que se establece automáticamente en la posición donde se realizó el último cambio. Consulte :help `.
para obtener más información.
También existe lo ``
que lo llevará de regreso a donde estaba el cursor antes de que hiciera su último salto. Ver : ayuda``
para más información.
Otra marca útil es `^
; Esta es la posición donde el cursor fue la última vez que se detuvo el modo de inserción. Ver :help `^
.
Consulte :help mark-motions
para obtener información más general sobre el uso de marcas (incluidas algunas otras marcas "especiales" que se configuran automáticamente).
'
(apóstrofe) en lugar de `
(retroceso).
Aquí hay otro enfoque que se ajusta a su escenario dado, y saltará a donde estaba inmediatamente antes de gg
(no a la última línea cambiada).
Cuando presiona gg
, su antigua posición del cursor se empuja a la lista de salto . De :help jumplist
:
Los saltos se recuerdan en una lista de saltos. Con el comando
CTRL-O
yCTRL-I
puede ir a las posiciones del cursor antes de los saltos más antiguos, y regresar nuevamente. Por lo tanto, puede moverse hacia arriba y hacia abajo en la lista. Hay una lista de salto separada para cada ventana. El número máximo de entradas se fija en 100.[...]
Si usa un comando de salto, el número de línea actual se inserta al final de la lista de salto. Si la misma línea ya estaba en la lista de salto, se elimina. El resultado es que al repetir
CTRL-O
, volverá a las posiciones anteriores solo una vez.
Esto requiere que esté usando Vim (no vi) con la +jumplist
función. Si :echo has('jumplist')
imprime 1
, entonces puede usar esto.
Para agregar a la respuesta de dnetserr y al comentario de Peter Rincker, Vim mantiene una lista de cambios y tiene algunos comandos asociados con esto.
:changes
enumerará los cambios, mostrándole dónde estaban y qué eran. Por ejemplo:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
La línea con los >
espectáculos muestra en qué parte de la pila de cambios se encuentra, algo así como la lista de salto ( :jumps
) o la pila de etiquetas ( :tags
). También, como la lista de salto y la pila de etiquetas, puede recorrer esta lista.
En el modo normal, los movimientos son g;
ir a una ubicación de cambio anterior e g,
ir a la siguiente. También puede escribir el número del cambio antes g;
o g,
para ir a ese cambio de la lista. Arriba, 2g;
me llevaría a donde ocurrió el cambio que involucra stdio.h.
Cuando está en el medio de la pila, los números de las :changes
actualizaciones muestran las distancias relativas. Por ejemplo:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
Esto muestra que puedo retroceder uno ( 1g;
o solo g;
) o avanzar uno ( 1g,
o solo g,
).
Esto es genial si el cambio al que quieres llegar realmente ocurrió hace algunas modificaciones
La desventaja de esto es que no parece actuar como un movimiento normal. Por ejemplo, no se puede hacer dg;
para eliminar desde el cursor hasta el punto de cambio anterior, mientras que d'.
y d'^
hacer el trabajo como movimientos.
Como el comando Deshacer en Vi actuará como rehacer cuando se deshizo el último comando, lo he utilizado uu
como un medio para volver a donde edité por última vez.
Si está ejecutando Vim con nocompatible
set (como lo hace la mayoría de la gente), desea usar u
seguido de CTRL+R
para deshacer y rehacer. De uu
lo contrario funcionará como en Vi.
:set nocompatible
no se usa.
vim
(con nocompatible
) hace dos deshacer con uu
, pero yo uso u
y CTRL+r
para el mismo efecto.
g;
yg,
para moverse entre las posiciones en la lista de cambios. Ver:h g;
y:h g,