7

我现在有时会遇到这个问题,部分原因是 Microsoft Office 会自动保存您正在使用的版本和自动恢复的文件。

很多时候,当我在mathematica 中启动一个新笔记本来做一些测试或其他什么时,我经常忘记保存我正在做的事情。

有时,根据我使用的计算机,计算机会崩溃,我所做的所有美丽工作都会永远丢失......

有没有办法解决这个问题,每五分钟疯狂地保存我的文件?文件版本控制如何?

顺便说一句:使用 MMA V8

4

4 回答 4

8

关于自动保存,您可能需要查看该NotebookAutoSave选项,该选项可以设置为 True through Fromat->Option Inspector。您必须选择“选定的笔记本”,然后转到Notebook Options -> File Options,并设置NotebookAutoSave为 True。然后,您的笔记本将在每次评估后保存。这是否是一个令人满意的解决方案,当然取决于情况。

但我的经验是,最可靠的方法是开发一种 CTRL+S 反射——这永远不会让我失望,而且效果很好。

至于版本控制,使用包更容易,您可以使用 WorkBench,它集成了对 CVS 的支持并通过 Eclipse 插件支持 SVN。对于笔记本,我建议您参考这个SO 线程。您可能还会发现 这个Mathgroup 讨论有些有趣。

编辑

对于 M8,出于自动保存目的,您可能还可以运行

RunScheduledTask[NotebookSave[EvaluationNotebook[]],{300}]

但我目前无法测试这段代码

编辑2

我刚刚在 Toolbag 存储库中看到了这篇文章 - 这也可能是问题的自动保存部分的替代方案(但另请参阅评论中关于计划任务与计划任务的相对优势的讨论Dynamic

于 2011-08-25T16:34:51.550 回答
5

由于您拥有 MMA 版本 8,因此您可以使用:

saveTask = CreateScheduledTask[FrontEndExecute[FrontEndToken["Save"]], 5*60];
StartScheduledTask[saveTask];

每 5 分钟保存一次(将术语 5*60 更改为其他时间)。

要删除自动保存任务,请使用:

RemoveScheduledTask[saveTask];

要仅保存固定的特定笔记本,请将其句柄存储在 nb 中(使用、 或Notebooks找到SelectedNotebook它)并使用而不是仅仅InputNotebookEvaluationNotebookFrontEndToken[nb,"Save"]FrontEndToken["Save"]

于 2011-08-25T21:06:17.040 回答
0

我有一个自动保存例程,它每 5 分钟(或任何您喜欢的时间间隔)保存每个打开的、修改过的笔记本的副本。它只保留您手动保存的副本,并将“交换文件”保存在一个单独的目录中,该目录可以如果需要,很容易恢复。代码(要复制到 init.m)在这个答案中给出:https ://mathematica.stackexchange.com/questions/18380/automatic-recovery-after-crash/65852#65852 ,和复制如下:

出于同样的担忧,我编写了以下代码并将其添加到我的 init.m 文件中。您需要更改两个主要条目以使用它。全局变量 $SwapDirectory 是保存交换文件的位置(通过交换文件,我的意思是 VIm 意义上的;笔记本的“额外”副本,与定期保存任何新工作的手动保存的副本分开)。交换文件在交换目录中组织在一个目录结构中,该目录结构“镜像”了它们的原始文件位置,并在文件名后附加了“.swp”。您可能想要更改的另一个变量是自动保存之间的秒数,由下面代码底部附近的“300”(对应于 5 分钟)表示。在适当的时候,

在其当前形式中,代码不会仅过滤输入单元格,但希望您可以使用其他答案自己进行修改。

需要注意的一些事项:
1) Mathematica Put 命令似乎无法写入网络驱动器,即使启用了离线访问也是如此。因此,最好选择本地计算机上的 SwapDirectory。

2) 在 SwapDirectory 中,您应该创建一个名为“Recovery”的子目录。这是 AutoSaveSwap 例程将对没有现有手动保存位置的任何笔记本进行初始保存的地方。

3) 简单地计算 RecoverSwap["filePath"] 其中 "filePath" 是一个字符串,表示文件的手动保存副本的文件路径(即,不是由 AutoSave 创建的文件)。这将弹出一个窗口,其中包含文件的最新自动保存版本。除非您明确选择这样做,否则永远不会覆盖手动保存的版本。恢复的版本弹出后,您可以将其保存在任何您喜欢的位置,或自行决定丢弃它。

4) 您可能应该将此代码添加到 init.m ($UserBaseDirectory/Kernel/init.m) 的 KERNEL 版本而不是前端版本...这样,如果您退出并重新启动内核,自动保存功能也会重新开始。另一方面,这意味着您必须在每次启动或重新启动后评估至少一个表达式才能开始自动保存。完成此初始评估后,您无需评估要备份的单元格(与内置的自动保存实用程序不同)。

希望这对某人有帮助!如有任何问题、建议或改进请求,请随时回复。而且,如果您觉得这篇文章有用,那么点赞将是最受欢迎的!小心。

    $SwapDirectory= "C:\\Users\\pacoj\\Swap Files\\"; 
    SaveSwap[nb_NotebookObject]:=Module[
        {fileName, swapFileName, nbout, nbdir, nbdirout, recoveryDir},
        If[ ! SameQ[Quiet[NotebookFileName[nb]], $Failed],
        (* if the notebook is already saved to the file system *)
            fileName = Last[ FileNameSplit[ NotebookFileName[nb]] ];
            swapFileName = fileName <> ".swp";
            nbdir = Rest[FileNameSplit @ NotebookDirectory[nb]];
            nbdirout= FileNameJoin[ FileNameSplit[$SwapDirectory]~Join~nbdir]<>"\\";
            If[!DirectoryQ[nbdirout], CreateDirectory[nbdirout]];
            nbout = NotebookGet[nb];
            Put[nbout, nbdirout <> swapFileName],
            (* else, if the file has never been saved, save as untitled *)
            recoveryDir= $SwapDirectory <> "Recovery\\\";
            fileName= ("WindowTitle" /. NotebookInformation[nb])<>".nb";
            NotebookSave[nb, recoveryDir <> fileName]
        ] 
    ]; 
    RecoverSwap::noswp= "swap file `1` not found in expected location";
    RecoverSwap[nbfilename_String]:=Module[
        {fileName, swapFileName, nbin, nbdir, nbdirout},
        fileName= Last[ FileNameSplit[ nbfilename] ];
        swapFileName= fileName <> ".swp";
        nbdir= Most[ Rest[FileNameSplit @ nbfilename] ];
        nbdirout= FileNameJoin[ FileNameSplit[$SwapDirectory]~Join~nbdir]<>"\\\";
        If[ FileNames[swapFileName, {nbdirout}] == {},
           Message[RecoverSwap::noswp,nbdirout <> swapFileName]; Return[],
           nbin= Get[nbdirout <> swapFileName]; NotebookPut[nbin]
        ] 
    ]; 
    AutoSaveSwaps= CreateScheduledTask[
        SaveSwap /@ Select[Notebooks[], "ModifiedInMemory" /. NotebookInformation[#]&],
        300 
    ] 
    StartScheduledTask[AutoSaveSwaps] 
于 2014-11-17T15:52:03.103 回答
0

我有一个提供自动备份功能的 Mathematica 包。启用后,当前笔记本(称为“blah.nb”)将在经过可配置的时间后备份到“blah.nb~”。我经常使用它,它使我免于失去工作很多很多次。它比自动保存更好,因为它不会触及实际的笔记本文件:如果您搞砸了某些东西或某些东西被损坏,您不想覆盖您的主文件。:)

它在GitHub 上。

于 2014-01-08T03:30:10.237 回答