Como posso descartar meu histórico de desfazer no vim?

23

Desfazer é bom ter no Vim. Mas às vezes, em um bom momento, eu quero apagar meu histórico de desfazer - para poder usar u para desfazer as alterações individuais, mas apenas para um certo ponto. (Por exemplo, isso pode ser quando eu cometi pela última vez.)

Uma maneira de conseguir isso seria fechar e reabrir o arquivo - o histórico de desfazer começa limpo nesse ponto. Mas isso é um aborrecimento.

No passado, consegui isso com :edit! . Mas no Vim 7.3, isso não descarta a história de desfazer.

Existe outra maneira de fazer isso, além de fechar o arquivo?

    
por Nathan Long 24.11.2010 / 19:29

6 respostas

11
:set undoreload=0 | edit

deve fazer o que você está pedindo.

    
por 28.03.2011 / 09:45
6

O antigo: edite! comportamento em um one-liner:

:exe "set ul=-1 | e! | set ul=" . &ul
    
por 07.06.2012 / 21:38
6

A função de Benoit não funcionou para mim, mas eu encontrei algo similar no manual do vim, aqui:

link

Eu coloquei em uma função, adicionada ao meu vimrc e parece estar funcionando bem no vim 7.3:

" A function to clear the undo history
function! <SID>ForgetUndo()
    let old_undolevels = &undolevels
    set undolevels=-1
    exe "normal a \<BS>\<Esc>"
    let &undolevels = old_undolevels
    unlet old_undolevels
endfunction
command -nargs=0 ClearUndo call <SID>ForgetUndo()

Isso pode ser usado com :ClearUndo .

    
por 29.03.2011 / 18:08
5

Provavelmente:

:let old_ul=&ul
:set ul=-1
:let &ul=old_ul
:unlet old_ul

( 'ul' é alias para 'undolevels' ).

    
por 24.11.2010 / 19:37
2

"Limpar o histórico de desfazer (: w para limpar o arquivo de desfazer, se apresentado)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul

  • Quando você define 'undolevels' como -1, as informações de desfazer não são imediatamente desmarcada, isso acontece na próxima alteração, ou seja, m-1 , o que na verdade não altera seu texto.
  • Quando 'undofile' estiver ativado, :w para limpar o arquivo de desfazer ou encadeado como UndoClear|w .
por 16.12.2013 / 07:36
1

Em um script:

function! <SID>ForgetUndo
     let old_ul = &ul
     set ul=-1
     let &ul = old_ul
     unlet old_ul
endfunction
command -nargs=0 Reset call <SID>ForgetUndo()

Em seguida, use :Reset para chamá-lo.

    
por 29.11.2010 / 14:37