Saltar para o conteúdo

Vim/Desfazendo

Origem: Wikilivros, livros abertos por um mundo aberto.

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 

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