Esta resposta diz:
O sistema de desfazer / refazer do Vim é imbatível. Digite algo, desfaça, digite outra coisa e você ainda poderá recuperar a primeira coisa que digitou, porque o Vim usa uma árvore de desfazer em vez de uma pilha. Em quase todos os outros programas, o histórico da primeira coisa que você digitou se perde nessa circunstância.
Esta é a primeira vez que ouço disso. Como posso voltar atrás na árvore?
Respostas:
Veja também
:h undo-redo
, que lista todos os comandos e seu uso.Existem duas maneiras de atravessar a árvore de desfazer. Uma é voltar no tempo.
g+
eg-
percorrerá todos os nós da árvore em ordem cronológica ou cronológica reversa (o que pode ser um pouco confuso, porque pode pular arbitrariamente entre desfazer ramificações, mas se você fizerg-
o suficiente, sempre chegará aonde precisa ir eventualmente).:earlier
e:later
use um descritor de tempo como7m
ou1h
; mais uma vez, você pode fazer o salto arbitrariamente entre desfazer ramos.A outra maneira é pular para nós específicos na árvore usando
:undo n
wheren
é o número de ações. (Todas as ações, ou seja, adições, exclusões, substituições de texto, são numeradas seqüencialmente à medida que você as executa.) Você pode procurar o número de ações nas folhas da árvore de desfazer via:undolist
. Isso permitirá que você salte entre os galhos facilmente. Você pode usaru
eCtrl-R
para mover para cima e para baixo nesse ramo.Existem alguns bons exemplos na ajuda do Vim. A melhor maneira de descobrir como isso funciona é brincar um pouco.
fonte
undojoin
não tem nada a ver com galhos; de fato, a próxima seção de ajuda começa dizendo "Acima, discutimos apenas uma linha de desfazer / refazer. Mas também é possível ramificar". Existe alguma maneira de usarundojoin
com galhos que simplesmente não estou vendo?Estou um pouco atrasado para a festa, mas achei que mencionaria que escrevi um plug-in de visualização de árvore para desfazer para o Vim: http://bitbucket.org/sjl/gundo.vim/
Pessoalmente, descobri que representar graficamente a árvore dessa maneira era a única maneira de entendê-la.
fonte
Plug 'sjl/gundo.vim'
e, em seguida,nnoremap <F5> :GundoToggle<CR>
(substituindo<F5>
por qualquer sequência de teclas que você deseja ligar)Esta página explica tudo o que você precisa saber:
http://vimdoc.sourceforge.net/htmldoc/usr_32.html
fonte
Se você estiver usando o vim, poderá navegar pela árvore de desfazer usando:
u
: (desfazer) voltar para a árvore de desfazerCtrl+R
: (refazer) avançar na árvore de desfazerOutras maneiras de trazer ou voltar o documento no tempo:
:earlier 15m
: voltar no tempo 15 minutos:later 15m
: avançar na frente 15 minutosfonte
earlier
elater
ele não estiver se movendo através dos ramos. Eu esperaria que a maioria das pessoas realmente não se importasse ou se lembrasse dos vários ramos que eles criaram. Mas só quero voltar no tempo. Se você deseja criar ramificações e nomeá-las, talvez,git
ou um sistema de controle de versão é uma opção melhor.Estou ciente de que esta pergunta foi respondida, mas pensei em adicionar um exemplo.
Crie um novo arquivo e digite:
undol
exibirá a árvore de desfazer. Neste ponto, você não desfez nadaAgora pressione ESC e modifique a linha para:
mude para o modo normal e pressione u (desfazer), isso deve remover "antigo". Se você verificar
undol
, neste momento você ainda possui apenas uma ramificação.Agora modifique a linha para que ela diga:
Agora
:undol
mostra:Você pode alternar para o primeiro ramo digitando
isso o levará ao final do ramo associado ao número 2. Você pode avançar nesse ramo com
g+
eg-
. Neste pontog+
, nada fará (você está na folha). Se você pressionarg-
“antigo” será removido (você está atravessando a primeira árvore de desfazer), ou seja, se você remover “antigo” comg-
e pressionarg+
novamente, “antigo” será refeito.Se você digitar
Você pulará para a folha do segundo ramo de desfazer e ele lerá:
fonte
Muito disso é resumido aqui:
http://vim.wikia.com/wiki/Using_undo_branches
fonte
Além de usar o gundo.vim, eu gosto de mencionar
g+
eg-
fonte
O pacote undotree é escrito em vimscript puro, portanto, não é necessário.
E adicione isso ao seu vimrc antes que seja tarde demais:
fonte