热退出是Sublime Text编辑器的杀手级功能之一。它允许在任何时间关闭编辑器,而不必担心打开文件中的修改-它只是关闭而没有任何问题。再次启动ST时,所有打开和编辑的文件都将处于关闭之前的状态。

我想知道有没有办法在vim中做同样的事情?

评论

:xa全部退出(保存所有更改并关闭Vim)

这将写入文件,但不会保存其他任何内容。我认为OP希望既保存文件又不编写文件,并保存所有打开的选项卡或缓冲区的状态

是的,后来我从他的评论中了解了这一点。

#1 楼

Vim可以做到这一点,尽管可能有些笨拙并需要进行一些设置。缺少的位是交换文件session:preserve&标志。

交换文件用于在Vim或系统崩溃时进行恢复。它们使您能够恢复所有未保存的更改(有一些限制,请参阅cpoptions)。但是,当Vim正常退出时,即使缓冲区有未保存的更改,它也会删除正在使用的所有交换文件。

:he swap-file:preservecpoptions就是其中的地方。&强制Vim写入所有缓冲区。立即切换到其交换文件(而不是4秒或200个字符之后的标准,或者您选择将其设置为任何标准)。执行:preserve会告诉Vim在正常退出时不要删除用:set cpoptions+=&保存的交换文件。

,不幸的是,Vim不会在从交换文件中恢复时自动清除交换文件,因此您很快就可以得到一个看起来像这样的目录这:

.foo.txt.swn
.foo.txt.swo
.foo.txt.swp
foo.txt


您可以手动删除较旧的文件,但是Vim仅在有:preserve文件放置新交换文件的地方自动提供恢复。 *.swp命令将强制Vim查找要从中恢复的交换文件。

通过使用自动命令,您可以自动进行保存(可能与:recover事件一起)和恢复(可能与QuitPreBufRead一起)。 Recover.vim是一个插件,可以作为友好的替代品来管理恢复。它似乎还可以处理交换文件。我不确定如何处理带有BufReadPost但没有.swo文件的目录。在这种情况下,您可能仍需要使用.swp

vim-obsession是另一个声称可以简化会话处理的插件。

#2 楼

是。它称为“会话”,您可以在以下位置阅读所有内容:

:help session


评论


我知道会话。但是似乎并不相同-它保存所有打开的缓冲区和选项卡(以及设置),但是如果其中一个缓冲区有一些更改,则必须在退出前将它们写入磁盘。在Sublime文本中,您无需在退出时保存打开的文件-Sublime将所有更改保存在单独的位置,并在重新打开时将其恢复。因此原始文件在磁盘上没有被修改,但是更改也不会丢失

–懒惰
2015年12月10日14:03

是的,那将是主要区别。不知道是否可以不借助tmux / screen / detach以任何方式实现它。

– romainl
2015年12月10日下午14:07