是否有任何Vim插件可实现崇高文本的热退出功能


11

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

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


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

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

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

Answers:


6

Vim可以做到这一点,尽管可能有些笨拙并需要进行一些设置。

罗曼(Romainl)让你与之同行session。缺少的位是交换文件:preserve,以及的&标志cpoptions

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

这就是:preservecpoptions&进来,:preserve力量Vim在所有缓冲区立即写信给他们的交换文件(4秒或200个字符,或者无论你的选项中设置它后不是标准)。这样可以:set cpoptions+=&告诉Vim 在正常退出时不要删除与之保存的交换文件:preserve

不幸的是,Vim在从交换文件中恢复时不会自动清除它们,因此您很快就可以得到一个如下所示的目录:

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

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

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

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


1

是。它称为“会话”,您可以在以下网站中阅读有关它的全部信息:

:help session

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

是的,那将是主要区别。不知道是否可以不借助tmux / screen / detach以任何方式实现它。
romainl 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.