it-swarm-pt.tech

Desfazer todas as alterações desde a abertura do buffer no vim

Como posso desfazer todas as alterações desde a abertura de um buffer? Eu imagino que possa haver alguma forma de :earlier isso faz isso.

UPDATE : Muitos sugerem soluções para passar para gravações anteriores de arquivos. Não foi o que eu pedi. Desejo retornar ao estado original em que estava o arquivo quando o carregei originalmente em um buffer, independentemente de quantas gravações foram feitas desde então.

43
David Rivers

Para reverter o buffer atual para o estado antes da primeira alteração lembrada pelo Vim na lista de desfazer (consulte :help undo-tree), use o comando

:u1|u
74
ib.

Você pode usar o

:edit!

comando para entrar no estado salvo mais antigo. Vejo :help edit! Para maiores informações.

Você também pode verificar algo como gundo.vim ( pode ser encontrado aqui ), que exibe toda a árvore de desfazer graficamente, e você pode saltar facilmente entre os pontos. Depois, há o histwin plugin que eu ainda não usei, mas oferece funcionalidade semelhante.

51
Zsolt Botykai

A partir da documentação

: u [ndo] {N} Salte para após o número da alteração {N}. Veja | desfazer ramificações | pelo significado de {N}. {não no Vi}

Se você digitar :u 1 parece ir para após a primeira alteração; pressionando u ou digitando :u voltará para a alteração.

Caso contrário, você pode usar uma contagem muito grande para :earlier ou g- por exemplo. :earlier 100000000 ou 100000000g-

Se você colocar isso em um mapeamento/comando, ele poderá executar qualquer um deles sem muitos problemas. por exemplo.

:nnoremap <C-F12> :earlier 100000000<CR>

6
benpmorgan

Para acessar o status do arquivo salvo anteriormente, acho que o seguinte trabalho:

:earlier 1f

A partir da documentação:

 :earlier {N}f      Go to older text state {N} file writes before.
                When changes were made since the last write
                ":earlier 1f" will revert the text to the state when
                it was written.  Otherwise it will go to the write
                before that.
                When at the state of the first file write, or when
                the file was not written, ":earlier 1f" will go to
                before the first change.
3
Xavier T.

No vim 8.1+ e também em neovim , você pode simplesmente usar :u0

3
Hope
:earlier {N}m Go to older text state about {N} minutes before.

Isso deve ajudar ... E até você tem {N} h, cerca de {N} horas antes.

0
user379997

Uma solução gráfica:

O plug-in Gundo permite a comparação visual de alterações no histórico de desfazer.

Abra o "painel de histórico de desfazer" do Gundo, digite G e vá para a última linha, depois podemos voltar ao arquivo original.

0
ying17zi