如何恢复 Notepad++ 丢失的会话

如何恢复 Notepad++ 丢失的会话

我的 Notepad++ 上至少打开了 50 个文件,用于整理我所有的工作。

我像往常一样让计算机休眠一整夜,令人惊讶的是,今天早上一切都消失了。

最大化 Notepad++ 时弹出一条错误消息,提示无法打开文件。

我接受了错误并且 Notepad++ 上没有文件。

重新启动后什么都没有任何变化,在备份文件夹中我只发现很久以前处理过的独立的旧脏文件......

关于如何恢复我宝贵的工作时间,您有什么想法吗?

谢谢,

答案1

你不能,但你可以确保不再发生这种情况。

这是可能的如果您在“偏好设置”中设置了云路径:

在此处输入图片描述

故障发生后,立即关闭与云的同步并从那里恢复原始文件。如果您的云具有文件版本控制,那么就更简单了:只需检索旧版本的session.xml

这也适用于所有其他设置文件,请参阅上面的链接了解详情。


另外请确保你至少更新到Notepad++ 7.5.9

在其修复的错误列表中,有

  1. 修复备份或断电或其他异常 N++ 终止期间可能出现的文件损坏问题。

是的,这个问题已在 2018 年 10 月得到解决。

答案2

除非您已将会话保存在云中(如上一个答案所示),否则您无法恢复整个会话。但是,您可以恢复未保存的(新)笔记。它们存储在:

%APPDATA%\Notepad++\backup

您可以直接在 Notepad++ 中打开所有这些文件,也可以在以下位置重新创建会话文件:

%APPDATA%\Notepad++\session.xml

这样该<mainView>部分将包含所有内容。

以下是一个 Python 脚本,可让您更轻松地重做会话文件。只需将输出粘贴在<mainView></mainView>标签之间即可:

import os
import os.path as osp

npp_path = osp.join(osp.expandvars('%APPDATA%'), 'Notepad++', 'backup')
for fn in sorted(os.listdir(npp_path), key=lambda fn: fn.split('@')[1]):
    name = fn.split('@')[0]
    print('<File firstVisibleLine="0" xOffset="0" scrollWidth="64" '
          'startPos="8" endPos="8" selMode="0" lang="Normal Text" '
          'encoding="-1" userReadOnly="no" filename="{name}" '
          'backupFilePath="{npp_path}\{fn}" originalFileLastModifTimestamp="0"'
          'originalFileLastModifTimestampHigh="0" '
          'mapFirstVisibleDisplayLine="-1" mapFirstVisibleDocLine="-1" '
          'mapLastVisibleDocLine="-1" mapNbLine="-1" mapHigherPos="-1" '
          'mapWidth="-1" mapHeight="-1" mapKByteInDoc="0" '
          'mapWrapIndentMode="-1" mapIsWrap="no" />'.format(
                  name=name, npp_path=npp_path, fn=fn))

答案3

感谢 Joe Pineda 对备份文件夹的评论。在我丢失崩溃的会话后,我发现此文件夹中有许多文件 - 既有未保存的笔记,也有已打开的现有文件。它们的大小(以字节为单位)不为零,但普通记事本和 Notepad++ 本身都没有显示任何内容。但是,您可以在 Linux 中阅读它们。

请记住复制备份目录,以防出现意外错误。

我通过列出文件名并从文件名中删除“new”来恢复未保存的笔记(Windows 喜欢文件名中的空格)。

for note in $(ls new*); do echo $note | grep -v new; done

该名称列表可以保存在变量中,然后可以将文件复制到例如 .txt:

filenames=$(for note in $(ls new*); do echo $note | grep -v new; done) 
for f in $filenames ; do cp 'new '$f 'new '$f.txt; done

答案4

如果没有备份,请从以下文件重建会话:备份文件夹

  1. 确定备份文件夹的路径。通常它在菜单中设置>优先>备份>备份路径. 假设它是:

    C:\工具\Notepad++\备份\

  2. 从该文件夹获取文件列表,假设它是:

    新 164@2021-10-11_114009
     新 169@2021-10-11_185349
     新 174@2021-10-12_184441
  3. 在 Notepad++ 目录中,编辑文件会话.xml
    • 在不同的编辑器中进行编辑,Notepad++ 没有运行

  4. 将您的文件列表转换为 XML<File />标签并将其插入到已经存在的<mainView />标签中,如下所示:

<mainView activeIndex="1">

<file filename="R-new 164" backupFilePath="C:\Tools\Notepad++\backup\new 164@2021-10-11_114009"/>  
<file filename="R-new 169" backupFilePath="C:\Tools\Notepad++\backup\new 169@2021-10-11_185349"/>  
<file filename="R-new 174" backupFilePath="C:\Tools\Notepad++\backup\new 174@2021-10-12_184441"/>

</mainView>

• 您可以注意到我R-new 164为已恢复文件选择了标签名称new 164,并对其他文件做了类似操作。这只是一个命名约定,您可以使用自己的约定。它将帮助您识别文件已恢复。它还可以防止命名冲突。

  1. 保存到会话.xml并运行 Notepad++。备份文件夹中的文件将出现在您的会话中。

  2. 您在之前丢失的会话中从其他文件夹(例如D:\Project\file.txt)打开的文件将仍然丢失的在会话中,但您可以正常找到并添加(打开)它们。如果它们在您的 N++ 崩溃时有未保存的草稿,您可以在已恢复的文件中找到它,它将有名称R-file.txt(根据您在步骤 4 中选择的命名约定)。

相关内容