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-motions
algumas 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-O
e,CTRL-I
você 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-O
você retornará às posições antigas apenas uma vez.
Isso requer que você esteja usando o Vim (não o vi) com o +jumplist
recurso. 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 :changes
atualizaçõ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 uu
como meio para voltar ao local da última edição.
Se você estiver executando o Vim com nocompatible
set (como a maioria das pessoas), você deseja usar u
seguido de CTRL+R
para desfazer e refazer. Caso contrário uu
, funcionará como no Vi.
:set nocompatible
não for usado.
vim
(com nocompatible
) faz dois desfazer com uu
, mas eu uso u
e CTRL+r
para o mesmo efeito.
g;
eg,
para alternar entre as posições na lista de alterações. Veja:h g;
e:h g,