Vim撤销:在文件写入后撤销更改

34
在vim编辑器中,我做了很多更改并使用ZZ命令保存并退出。但后来意识到我不需要这些更改了。是否有一种方式可以从某个缓冲区返回到保存之前的状态,该数据可能仍存储在其中。我在保存并退出后没有进行任何更改。

1
从备份中恢复。 - choroba
@choroba,确切地说,这就是我需要知道的,我该怎么做? - brokenfoot
2
你是否开启了持久撤销功能?(很可能没有,但这是一个值得未来考虑的选项)请查看:h persistent-undo - FDinoff
@FDinoff: 我之前没有开启这个功能,现在已经在我的 .vimrc 文件中添加了以下内容: set undofile set undodir=/home/<uname>/.vimundo/ - brokenfoot
如果您在目录中看不到文件名前的旧版本文件,则可能是您的 .vimrc 文件中的 bdir 或 backupdir 设置为类似于 ~/.vimbackup 的内容。 - stevesliva
1个回答

60

Vim中有持久撤销选项,:h persistent-undo
注意:它在VIM 7.3版本中引入,因此对于早期版本,它将无法工作。

您可以通过在.vimrc文件中添加以下文本来启用它:

if has('persistent_undo')      "check if your vim version supports it
  set undofile                 "turn on the feature  
  set undodir=$HOME/.vim/undo  "directory where the undo files will be stored
endif     

注意:在启用此选项之前,无论丢失了什么,都将永远丢失。
启用该选项后,您将能够对启用该选项后添加/删除的内容进行后续的撤销/重做操作。

8
请注意,为使其正常工作,您需要确保目录存在。 - Searene
1
我不确定为什么这个答案被接受了。我和问题中提出的情况一样,但我仍然不明白它是如何解决问题的。这个设置似乎只对新文件/更改有效。 - ka3ak
1
你可以通过在if块内添加语句silent !mkdir -p ~/.vim/undo来确保目录存在。这个解决方案假设你有写入权限来创建目录~/.vim/undo - Miron Veryanskiy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接