Desfazer é bom ter no Vim. Mas, às vezes, em um ponto conhecido, quero apagar meu histórico de desfazer - para poder u
desfazer alterações individuais, mas apenas voltando a um determinado ponto. (Por exemplo, isso pode ser quando eu cometi a última vez.)
Uma maneira de conseguir isso seria fechar e reabrir o arquivo - o histórico de desfazer começa limpo nesse momento. Mas isso é um aborrecimento.
No passado, eu 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?
git checkout -f file
ouhg rollback file
?u
para desfazer alterações individuais, mas não além do ponto em que cometi pela última vez. Exatamente como se, toda vez que eu comprometesse, fechasse o arquivo e o reabrisse. O que:edit!
costumava fazer - era como fechar o arquivo e reabri-lo. Isso não precisa estar vinculado a um ponto de confirmação, é exatamente o momento em que eu o desejaria com mais frequência.Respostas:
deve fazer o que você está pedindo.
fonte
O velho: editar! comportamento em uma linha:
fonte
:h :exe
,:h :bar
,:h :set-args
,:h 'ul'
e:h :edit!
.A função de Benoit não funcionou para mim, mas eu encontrei algo semelhante no manual do vim, aqui:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
Coloquei-o em uma função, adicionado ao meu vimrc e ele parece estar funcionando bem no vim 7.3:
Isso pode ser usado com
:ClearUndo
.fonte
Provavelmente:
(
'ul'
é alias para'undolevels'
).fonte
:edit!
. Para começar, criei uma função chamada ClearUndos () com os comandos que você listou, mas chamá-la não parece fazer nada, ao passo que executar os comandos individualmente faz ...:command -nargs=0 Reset let old_ul=&ul | set ul=-1 | e! | let &ul = old_ul | unlet old_ul
|
em um conteúdo de comando. Em seguida, crie uma função que faz o que eu disse na minha resposta, e definir o comando paracall thefunction()
."Limpar 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
, que na verdade não altera o seu texto.'undofile'
estiver ativado,:w
limpe o arquivo de desfazer ou faça o encadeamentoUndoClear|w
.fonte
Em um script:
Em seguida, use
:Reset
para chamá-lo.fonte
set ul=
comando afete apenas uma variável local até a saída do script e, como a alteramos antes da saída do script, isso nunca afeta o ambiente? Você testou esta função e a fez funcionar - ou seja, há algo estranho na minha configuração?