Respostas:
O `.comando levará você à sua última alteração.
O `vai para uma marca, e .é uma marca "especial" que é automaticamente colocado na posição em que a última alteração foi feita. Veja :help `.para mais algumas informações.
Há também o ``que o levará de volta para onde estava o cursor antes de você dar o seu último salto. Veja : ajuda`` para mais informações.
Outra marca útil é `^; esta é a posição em que o cursor foi a última vez em que o modo de inserção foi parado. Veja :help `^.
Consulte :help mark-motionsalgumas informações mais gerais sobre o uso de marcas (incluindo outras marcas "especiais" que são definidas automaticamente).
'(apóstrofo) em vez de `(backtick).
Aqui está outra abordagem que se ajusta ao seu cenário e saltará para onde você estava imediatamente antes da gg(não da última linha alterada).
Quando você pressiona gg, sua antiga posição do cursor é empurrada para a lista de pulos . De :help jumplist:
Os saltos são lembrados em uma lista de saltos. Com o comando
CTRL-Oe,CTRL-Ivocê pode ir para as posições do cursor antes dos saltos mais antigos e voltar novamente. Assim, você pode mover para cima e para baixo na lista. Há uma lista de atalhos separada para cada janela. O número máximo de entradas é fixado em 100.[...]
Se você usar um comando de salto, o número da linha atual será inserido no final da lista de salto. Se a mesma linha já estava na lista de saltos, ela será removida. O resultado é que, ao repetir,
CTRL-Ovocê retornará às posições antigas apenas uma vez.
Isso requer que você esteja usando o Vim (não o vi) com o +jumplistrecurso. Se :echo has('jumplist')imprimir 1, você pode usá-lo.
Para adicionar à resposta de dnetserr e ao comentário de Peter Rincker, o Vim mantém uma lista de alterações e possui alguns comandos associados a isso.
:changes
listará as alterações, mostrando onde elas estavam e o que estavam. Por exemplo:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
A linha com os >shows onde você está na pilha de alterações, como a lista de pulos ( :jumps) ou a pilha de tags ( :tags). Também como a lista de pulos e a pilha de tags, você pode percorrer esta lista.
No modo normal, os movimentos são g;para ir para um local de alteração anterior e g,para o próximo. Você também pode digitar o número da alteração antes g;ou g,para ir para essa alteração na lista. Acima, 2g;me levaria para onde ocorreu a mudança envolvendo stdio.h.
Quando no meio da pilha, os números das :changesatualizações mostram as distâncias relativas. Por exemplo:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
Isso mostra que eu posso voltar um ( 1g;ou apenas g;) ou encaminhar um ( 1g,ou apenas g,).
Isso é ótimo se a alteração que você deseja obter realmente ocorreu algumas modificações atrás
A desvantagem disso é que ele não parece agir como um movimento normal. Por exemplo, você não pode dg;excluir o cursor do local de alteração anterior, d'.e d'^funciona como movimentos.
Como o comando desfazer no Vi funcionará como uma refazer quando o último comando foi desfeito, usei uucomo meio para voltar ao local da última edição.
Se você estiver executando o Vim com nocompatibleset (como a maioria das pessoas), você deseja usar useguido de CTRL+Rpara desfazer e refazer. Caso contrário uu, funcionará como no Vi.
:set nocompatiblenão for usado.
vim(com nocompatible) faz dois desfazer com uu, mas eu uso ue CTRL+rpara o mesmo efeito.
g;eg,para alternar entre as posições na lista de alterações. Veja:h g;e:h g,