Vim 中有撤销功能真是太好了。但有时,在某个已知的好时机,我想删除我的撤销历史记录 - 以便能够u
撤销个别更改,但只能撤消到某个特定点。(例如,这可能是我上次提交的时间。)
实现此目的的一种方法是关闭并重新打开文件 - 此时撤消历史记录将重新开始。但这很麻烦。
过去,我使用 来实现这一点:edit!
。但在 Vim 7.3 中,这不会丢弃撤消历史记录。
除了关闭文件之外,还有其他方法可以做到这一点吗?
答案1
:set undoreload=0 | edit
应该做你所要求的事。
答案2
旧的 :edit! 单行行为:
:exe "set ul=-1 | e! | set ul=" . &ul
答案3
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()
这可以与 一起使用:ClearUndo
。
答案4
“清除撤消历史记录(:w 清除撤消文件(如果存在))
command! -bar UndoClear exe "set ul=-1 | m-1 | let &ul=" . &ul
- 当您将“undolevels”设置为 -1 时,撤消信息不会被立即清除,这会在下一次更改时发生,即
m-1
,这实际上并不会改变您的文本。 - 当
'undofile'
打开时,:w
清除撤消文件,或类似链接UndoClear|w
。