如何在 vim 中丢弃我的撤消历史?

Nat*_*ong 26 vim history gvim undo macvim

在 Vim 中撤消很不错。但有时,在一个已知的好点,我想删除我的撤消历史 - 能够u用来撤消单个更改,但只能回到某个点。(例如,这可能是我上次提交的时间。)

完成此操作的一种方法是关闭并重新打开文件 - 撤消历史记录在此时开始清理。但这很麻烦。

过去,我使用:edit!. 但是在 Vim 7.3 中,这不会丢弃撤消历史。

除了关闭文件之外,还有其他方法可以做到这一点吗?

小智 14

:set undoreload=0 | edit
Run Code Online (Sandbox Code Playgroud)

应该做你所要求的。


小智 7

旧的:编辑!单行中的行为:

:exe "set ul=-1 | e! | set ul=" . &ul
Run Code Online (Sandbox Code Playgroud)


小智 6

Benoit 的功能对我不起作用,但我在 vim 手册中找到了类似的东西,在这里:

http://www.polarhome.com/vim/manual/v73/undo.html#undo-remarks

我把它变成了一个函数,添加到我的 vimrc 中,它似乎在 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()
Run Code Online (Sandbox Code Playgroud)

这可以与:ClearUndo.


Ben*_*oit 5

大概:

:let old_ul=&ul
:set ul=-1
:let &ul=old_ul
:unlet old_ul
Run Code Online (Sandbox Code Playgroud)

'ul'是 的别名'undolevels')。

  • `:command -nargs=0 重置 let old_ul=&amp;ul | 设置 ul=-1 | 电子!| 让 &amp;ul = old_ul | unlet old_ul` (3认同)