Vim/Desfazendo
Desfazendo
[editar | editar código-fonte]Se você cometer um erro, não se preocupe! Use o comando "undo":
u desfaz a última mudança (pode ser repetido para diversos comandos) U desfaz todas as mudanças na última linha editada CTRL-R refaz as mudanças desfeitas (isto é, um "undo do undo").
Para mais ajuda sobre "undo":
:help undo
Undo tree
[editar | editar código-fonte]Um novo recurso muito interessante foi adicionado ao vim `a partir da versão 7 (Obs: para cada alteração sugerida saia do modo insert <esc> e inicie a nova alteração) é a chamada árvore do desfazer.
Se você desfaz alguma coisa, fez uma alteração um novo 'branch' ou galho, derivação de alteraçã, ou seja lá como queira chamar é criado.
Suponha que você edite um arquivo assim:
one ~ | change 1 | one too ~ / \ change 2 change 3 | | one two me too ~
Se você seguir as alterações propostas acima, ou seja, voltar até alteração 1 e seguir para alteraão 3, verá que o desfazer/refazer linear não resolve todos os seus problemas, isto se deve ao fato de que a maioria dos editores tem um desfazer/refazer linear, ou seja, não pode haver derivação (branch) de alterações, para acessar todas as alterações use
g- ........ retrocede na árvore de alterações g+ ........ avança na lista de alterações
Basicamente, os 'branches' nos permitem acessar quaisquer alterações ocorrida no arquivo.
Um exemplo mais didático
[editar | editar código-fonte]Siga estes passos (para cada passo <esc>, ou seja saia do modo insert)
Passo 1 - digite na linha 1 o seguinte texto
# controle de fluxo <esc>
Passo 2 - digite na linha 2 o seguinte texto
# um laço for <esc>
Passo 3 - Nas linhas 3 e 4 digite...
for i in range(10): print i <esc>
Passo 4 - pressione 'u' duas vezes (você voltará ao passo 1) Passo 5 - Na linha 2 digite
# operador ternário <esc>
Passo 6 - na linha 3 digite
var = (1 if teste == 0 else 2) <esc>
Obs: A necessidade do ESC é para demarcar as ações, pois o vim considera cada inserção uma ação.
Agora usando o atalho de desfazer tradicional 'u' e de refazer Ctrl-r observe que não é mais possível acessar todas as alterações efetuadas
Em resumo, se você fizer uma nova alteração após um desfazer (alteração derivada) o comando refazer não mais vai ser possível para aquele momento.
Agora volte até a alteração 1 e use seguidas vezes
g+
e / ou
g-
Dessa forma você acessará todas as alterações ocorridas no texto!
Voltando n minutos no tempo
[editar | editar código-fonte]Também é possível no vim determinar um momento específico para o qual queremos retornar
:earlier 10m