:set undoreload=0 | edit
deve fazer o que você está pedindo.
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?
O antigo: edite! comportamento em um one-liner:
:exe "set ul=-1 | e! | set ul=" . &ul
A função de Benoit não funcionou para mim, mas eu encontrei algo similar no manual do vim, aqui:
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
.
Provavelmente:
:let old_ul=&ul
:set ul=-1
:let &ul=old_ul
:unlet old_ul
( 'ul'
é alias para 'undolevels'
).
"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
m-1
, o que na verdade não altera seu texto. 'undofile'
estiver ativado, :w
para limpar o arquivo de desfazer ou encadeado como UndoClear|w
. 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.