UndoはVimにあるといいです。しかし、時々、既知の良い時点で、元に戻す履歴を消去したいことがあります。u
を使用して個々の変更を元に戻すことができますが、特定の時点に戻るだけです。 (たとえば、これは私が最後にコミットしたときかもしれません。)
これを実現する1つの方法は、ファイルを閉じて再度開くことです。元に戻す履歴は、その時点でクリーンに開始されます。しかし、それは面倒です。
以前、私は:edit!
でこれを達成しました。しかし、Vim 7.3では、元に戻す履歴は破棄されません。
ファイルを閉じる以外に、これを行う別の方法はありますか?
:set undoreload=0 | edit
あなたが求めていることをする必要があります。
古い:編集!ワンライナーでの動作:
:exe "set ul=-1 | e! | set ul=" . &ul
Benoitの機能は私には機能しませんでしたが、vimのマニュアルで似たようなものを見つけました:
http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks
私はそれを関数に叩き込み、vimrcに追加しましたが、vim7.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()
これは:ClearUndo
で使用できます。
多分:
:let old_ul=&ul
:set ul=-1
:let &ul=old_ul
:unlet old_ul
('ul'
は'undolevels'
のエイリアスです)。
"元に戻す履歴をクリアします(:wが表示された場合、元に戻すファイルをクリアします)command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
m-1
で発生しますが、実際にはテキストは変更されません。'undofile'
がオンの場合、:w
で元に戻すファイルをクリアするか、UndoClear|w
のようにチェーンします。スクリプト内:
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()
次に、:Reset
を使用して呼び出します。