web-dev-qa-db-ja.com

vimで元に戻す履歴を破棄するにはどうすればよいですか?

UndoはVimにあるといいです。しかし、時々、既知の良い時点で、元に戻す履歴を消去したいことがあります。uを使用して個々の変更を元に戻すことができますが、特定の時点に戻るだけです。 (たとえば、これは私が最後にコミットしたときかもしれません。)

これを実現する1つの方法は、ファイルを閉じて再度開くことです。元に戻す履歴は、その時点でクリーンに開始されます。しかし、それは面倒です。

以前、私は:edit!でこれを達成しました。しかし、Vim 7.3では、元に戻す履歴は破棄されません。

ファイルを閉じる以外に、これを行う別の方法はありますか?

24
Nathan Long
:set undoreload=0 | edit

あなたが求めていることをする必要があります。

12
Steven

古い:編集!ワンライナーでの動作:

:exe "set ul=-1 | e! | set ul=" . &ul
7
Aldrik

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で使用できます。

6
Nycto

多分:

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

'ul''undolevels'のエイリアスです)。

5
Benoit

"元に戻す履歴をクリアします(:wが表示された場合、元に戻すファイルをクリアします)
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul

  • 'undolevels'を-1に設定すると、元に戻す情報はすぐにはクリアされません。これは、次の変更、つまりm-1で発生しますが、実際にはテキストは変更されません。
  • 'undofile'がオンの場合、:wで元に戻すファイルをクリアするか、UndoClear|wのようにチェーンします。
3
Bohr

スクリプト内:

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を使用して呼び出します。

1
Benoit