让我以这种方式提出问题。我在vim中打开一个新文件(版本1)
#include<stdio.h>
main()
{
...blah
}
然后使用<Esc>:w<Enter>
来编写文件。然后进行了更改(版本2)
#include<stdio.h>
main()
{
...blah
... edit1
... edit2 //and large number of changes here and there in code
}
然后我使用<Esc>:w<Enter>
保存更改。
有没有办法直接撤消对版本1的更改(因为它是最后一次保存),即没有经常按u
undo
答案 0 :(得分:18)
来自Vim的帮助:
:earlier {N}f Go to older text state {N} file writes before.
When changes were made since the last write
":earlier 1f" will revert the text to the state when
it was written. Otherwise it will go to the write
before that.
When at the state of the first file write, or when
the file was not written, ":earlier 1f" will go to
before the first change.
因此,如果您在第二次保存后没有进行更改,则可以执行以下操作:
:earlier 1f
另一方面,如果在第二次保存后进行了未保存的更改,则:
:earlier 2f
将解决您的问题。
请参阅:help :earlier
,:help :undolist
。
答案 1 :(得分:2)
当你第一次轻松打开文件时,你可以回到原点。只需在u
之前输入一个数字。
10000u
,将撤消10000
次。如果这还不够,请尝试1000000u
:)
如果要逐位撤消,可以按任意增量进行,请尝试5u
。
如果您只想使用:e
从磁盘重新加载文件。
答案 2 :(得分:0)
将其放入您的.vimrc。
在正常模式下,u会撤消直到上一次保存。再按一次将撤消直到保存之前。如果您进行了任何更改,仍然可以使用大量<C-R>
回到原始位置。
nnoremap U :ea 1f<CR>