我打开了Emacs但不小心删除了它在启动时读取的.emacs文件。这代表了大约15年的调整。(我知道,我知道,备份。)
有没有办法让Emacs重新写出我已经删除的.emacs文件?
我通常不会在SO上问这种愚蠢的问题,但我知道我只剩下一天左右的时间来完成这个Emacs会话。
我打开了Emacs但不小心删除了它在启动时读取的.emacs文件。这代表了大约15年的调整。(我知道,我知道,备份。)
有没有办法让Emacs重新写出我已经删除的.emacs文件?
我通常不会在SO上问这种愚蠢的问题,但我知道我只剩下一天左右的时间来完成这个Emacs会话。
(setq custom-file "/my/home/directory/.emacs-custom.el")
(custom-save-all)
(setq custom-file "/my/home/directory/.emacs-custom.el")
(load custom-file)
这将至少恢复一些在您的 .emacs 文件中的自定义变量设置。
正如ayckoster所建议的那样,您可以尝试使用文件恢复或取证工具,例如The Sleuth Kit。 或者,这可能听起来很疯狂,如果您正在使用类Unix系统,则可以搜索原始磁盘设备(在我当前使用的Mac上,那将是/dev/rdisk1)。 说真的,有好几次我懒得使用完整的恢复工具,而是使用像sudo less -f /dev/rdisk1
这样的东西,搜索我知道在文件中的字符串(global-set-key
,任何人都行?),并成功恢复了文件的原始内容。
Emacs会评估您的.emacs文件,然后关闭它。因此,基本上您无法找回您的.emacs文件。
解决方案可能是使用文件恢复应用程序。您的硬盘驱动器上有.emacs文件的几率非常高。
由于大多数这样的程序无法推断已删除文件的文件名或目录名,因此您必须知道您的.emacs文件的内容。
然后,您可以在某个文件夹中恢复所有当前已删除的文件,并递归搜索您的.emacs文件的内容。
这个过程可能需要很长时间。您必须决定是否值得这样做。
我不知道有什么方法可以让Emacs提供原始的.emacs文件,但是你肯定可以查询已加载的函数和变量符号,并获取它们的值。
这可能需要相当多的工作,但我认为理论上你应该能够以某种形式获得大部分数据,如果你成功地将其过滤到你知道是你自己的内容。
对于已评估的函数,(symbol-function 'SYMBOL)
将返回所提供函数的(不易读的)定义。然后,您可以使用(fset 'SYMBOL VALUE)
,其中VALUE是对symbol-function
调用的结果,来定义一个新的.emacs文件中的该函数。这将为您提供恢复定义的函数的方法。
你也可以看一下: 如何在emacs中打印所有已定义的变量?
这只是一个非常不完整的入门指南,但考虑到时间限制,我将其发布并标记为社区wiki,如果有人想继续开发它。
一个可靠地以可恢复方式转储应用程序状态的操作指南将是一个很好的开始,如果当前会话肯定要被终止(甚至如果不是,实际上也是如此,以防止崩溃或其他意外情况)。
您可以潜在地重新标记它,使用一些更通用的数据恢复类型标签,以扩大受众。
customize
去抛出一些设置,并检查加载的库(这可能需要花费一些时间!)……只是一个想法。 - ocodo