Wolfram mathematica 自动保存笔记本(或mathematica中的其他类型文件)文件

Wolfram mathematica 自动保存笔记本(或mathematica中的其他类型文件)文件,wolfram-mathematica,versioning,autosave,Wolfram Mathematica,Versioning,Autosave,我有时会遇到这个问题,部分原因是Microsoft Office会自动保存您正在使用的文件,并使用版本和自动恢复 很多时候,当我开始用mathematica的新笔记本做一些测试或其他什么的时候,我经常忘记保存我正在做的事情 时不时地,取决于我使用的电脑,电脑会崩溃,我做的所有漂亮的工作都会永远消失 有没有一种方法可以绕过每五分钟疯狂保存一次我的文件?文件版本控制如何 顺便说一句:使用MMA V8有关自动保存的,您可能希望查看NotebookAutoSave选项,该选项可以通过Fromat->op

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

很多时候,当我开始用mathematica的新笔记本做一些测试或其他什么的时候,我经常忘记保存我正在做的事情

时不时地,取决于我使用的电脑,电脑会崩溃,我做的所有漂亮的工作都会永远消失

有没有一种方法可以绕过每五分钟疯狂保存一次我的文件?文件版本控制如何


顺便说一句:使用MMA V8有关自动保存的,您可能希望查看
NotebookAutoSave
选项,该选项可以通过
Fromat->option Inspector
设置为True。您必须选择“所选笔记本”,然后转到
notebook Options->File Options
,并将
notebook autosave
设置为True。然后,您的笔记本将在每次评估后保存。当然,这是否一个令人满意的解决方案取决于具体情况

但我的经验是,最可靠的方法是开发CTRL+S反射-这一个从来没有让我失望,而且工作得很好

至于版本控制,使用包要容易得多,您可以使用WorkBench,它通过Eclipse插件集成了对CVS的支持和对SVN的支持。对于笔记本,我建议您参考SO线程。你也可能会发现一些有趣的小组讨论

编辑

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

RunScheduledTask[NotebookSave[EvaluationNotebook[]],{300}]
但是我现在不能测试这个代码

EDIT2


我刚刚在Toolbag repository中看到一篇文章,这篇文章也可能是问题自动保存部分的另一种选择(但也请参见评论中关于计划任务相对于动态任务的相对优势的讨论)

,因为您有MMA版本8,您可以使用:

saveTask = CreateScheduledTask[FrontEndExecute[FrontEndToken["Save"]], 5*60];
StartScheduledTask[saveTask];
每5分钟保存一次(将术语5*60更改为其他计时)

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

RemoveScheduledTask[saveTask];

要仅保存固定的特定笔记本,请将其句柄存储在nb中(使用
notebook
SelectedNotebook
InputNotebook
EvaluationNotebook
),并使用
FrontEndToken[nb,“save”]
而不仅仅是
FrontEndToken[“save”]

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


它在GitHub上。

我有一个自动保存例程,每5分钟(或您喜欢的任何时间间隔)保存一份打开的、修改过的笔记本的副本。它让手动保存的副本保持不变,并将“交换文件”保存在单独的目录中,如果需要,可以轻松恢复。代码(复制到init.m)答案如下:,并抄录如下:

出于同样的考虑,我编写了以下代码并将其添加到我的init.m文件中。要使用它,您需要更改两个主要条目。全局变量$SwapDirectory是保存交换文件的地方(所谓交换文件,我指的是VIm意义上的“额外”)笔记本的副本,与定期保存任何新工作的手动保存副本分开)。交换文件以目录结构组织在交换目录中,该目录结构“镜像”其原始文件位置,并具有“.swp”附加到其文件名之后。您可能要更改的另一个变量是自动保存之间的秒数,由下面代码底部附近的“300”(对应于5分钟)表示。在适当的时间,此代码将(自动在后台)保存所有打开的笔记本电脑的交换文件,除非这些文件未从手动保存的版本中修改(此异常会使代码更高效,更重要的是,会阻止存储文档笔记本电脑的交换文件)

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

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

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

3) 简单评估 RecoverSwap[“文件路径”] 其中“filePath”是一个字符串,表示手动保存的文件副本的文件路径(即,不是由AutoSave创建的文件)。然后会弹出一个窗口,其中包含文件的最新自动保存版本。手动保存的版本永远不会被覆盖,除非您明确选择这样做。一旦恢复的版本弹出,您可以将其保存在任何您喜欢的地方,或者根据您的判断将其丢弃

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

希望这有帮助
    $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]