Vim可以保存和恢复文件内容的状态吗?

时间:2014-05-26 02:28:56

标签: vim

我试图设置一个系统,我可以建立一个"检查点"在我的Vim代码内容中,当我通过按键盘命令跳回到该状态时。如果有人曾经玩过模拟器,那么这实际上就是一个保存状态。如果我可以跳回状态并将我的缓冲区,文件和确切的文件内容(即使它们与磁盘上的文件的内容不同)回到它们所在的位置,那将是理想的。

此功能类似于撤消,但是当vim关闭时,状态历史记录可以保留。

2 个答案:

答案 0 :(得分:3)

从7.3版开始,Vim有持久性撤销。您可以通过

启用此功能
:set undofile

有关详细信息,请参阅:help undo-persistence

"检查点标识符"可以通过:undolist命令或

检索
:echo undotree().seq_cur

然后,您可以通过:[N]undo:earlier / :later命令返回到该状态[N]。或者使用undotree.vim - Display your undo history in a graphGundo - Visualize your undo tree这样的插件,为撤消历史记录提供更舒适的浏览器。

请注意,此状态仍然只是每个缓冲区,Vim只有不相关的会话功能,可以对文件集进行分组编辑,但那些不会自动存储您的检查点。

答案 1 :(得分:1)

我们知道你想要什么,但你并没有真正解释为什么你想要它:你想解决什么问题?会话之间的持久性?不知道如何使用undo?

如果您希望会话之间保持持久性,可以使用screentmux。它们是终端多路复用器,允许您(除其他事项外)将当前会话置于保持状态,并在几天后从不同的主机或其他任何地方恢复:

$ tmux
$ vim -O foo.js bar.js
C-b d
(time passes, work is done elsewhere…)
$ tmux attach

$ screen
$ vim -O foo.js bar.js
C-a d
(time passes, work is done elsewhere…)
$ screen -r

您还可以使用Vim的会话管理:

:mksession
(time passes, work is done elsewhere…)
:source Session.vim
(time passes, work is done elsewhere…)
:q
(time passes, work is done elsewhere…)
$ vim -S

请参阅:help :mksession