USR_11

*usr_11.txt*    For Vim version 7.0.  最后修改时间:2005年1月

                    Vim 用户手册 - by Bram Moolenaar
                (译者:Nek_in http://vimcdoc.sf.net)

                              从崩溃中恢复


你的计算机崩溃过吗?是不是还正好在你编辑了几个小时以后?不要惊慌!Vim 已经保存
了大部分的信息使你可以恢复你的大多数数据。本章告诉你怎样恢复这些数据并向你介绍
Vim 是如何处理交换文件的。

|11.1|  基本恢复
|11.2|  交换文件在哪
|11.3|  是不是崩溃了?
|11.4|  深入阅读

     下一章:|usr_12.txt|  小窍门
     前一章:|usr_10.txt|  做大修改
       目录:|usr_toc.txt|


*11.1* 基本恢复

在大多数情况下,恢复一个文件相当简单。假设你知道正在编辑的是哪个文件(并且硬盘 还能用)。可以用 "-r" 选项启动 Vim: vim -r help.txt Vim 会读取交换文件(用于保存你的编辑数据的文件)并且提取原文的编辑碎片。如果一 切顺利,你会看到如下文字 (当然了,文件名会不一样): Using swap file ".help.txt.swp" Original file "~/vim/runtime/doc/help.txt" Recovery completed. You should check if everything is OK. (You might want to write out this file under another name and run diff with the original file to check for changes) Delete the .swp file afterwards. 译者注:中文情况下是: 使用交换文件 ".help.txt.swp" 原文件 "~/vim/runtime/doc/help.txt" 恢复完成. 请确定一切正常. (你可能想要把这个文件另存为别的文件名, 再执行 diff 与原文件比较以检查是否有改变) 之后可以删除交换文件。 ) 为了安全起见,可以用另一个文件名保存这个文件: :write help.txt.recovered 可以把这个文件与原文件作一下比较,看看恢复的效果如何。这方面 Vimdiff 可以帮很大 的忙(参见|08.7|)。注意用一个比较新的原文件来比较(你在计算机崩溃前最后保存过 的文件),并且检查有没有东西丢失了(由于某些问题导致 Vim 无法恢复)。 如果在恢复的过程中 Vim 显示出一些警告信息,注意小心阅读。这应该是很少见的。 最后所做的一些修改不能恢复是正常的。Vim 在你停止4秒不输入的时候才会更新交换 文件。这个时间可以通过 'updatetime' 和 'updatecount' 两个选项来调整。这样,如果 系统崩溃前 Vim 没有更新交换文件,最后一次更新后编辑的内容就会丢失。 如果你编辑的时候没有给定文件名,可以用一个空的字符串来表示文件名: vim -r "" 你需要进入原来的文件夹执行这个命令,否则 Vim 是找不到这个交换文件的。

*11.2* 交换文件在哪

Vim 可以把交换文件保存在几个不同的地方。通常是原文件所在的目录。要知道这一点, 进入该目录,然后输入: vim -r Vim 会列出所有它能找到的交换文件。它还会从其它目录寻找本目录文件的交换文件,但 这种寻找不会遍及整个目录树。 这个命令的输出如下: Swap files found: In current directory: 1. .main.c.swp owned by: mool dated: Tue May 29 21:00:25 2001 file name: ~mool/vim/vim6/src/main.c modified: YES user name: mool host name: masaka.moolenaar.net process ID: 12525 In directory ~/tmp: -- none -- In directory /var/tmp: -- none -- In directory /tmp: -- none -- 译者:中文的情形如下: 找到以下交换文件: 当前目录: 1. .main.c.swp owned by: mool dated: Tue May 29 21:00:25 2001 file name: ~mool/vim/vim6/src/main.c modified: YES user name: mool host name: masaka.moolenaar.net process ID: 12525 目录 ~/tmp: -- 无 -- 目录 /var/tmp: -- 无 -- 目录 /tmp: -- 无 -- ) 如果有几个交换文件,其中一个可能是你要的,Vim 会给出一个文件列表,你需要输入一 个表示这个文件的数字。小心检查那几个文件的时间,并确定哪一个才是你需要的。 万一你不知道是那个的话,一个一个试一试。 使 用 指 定 的 交 换 文 件 如果你知道要用哪个文件,你可以指定交换文件的名字。Vim 会找出交换文件所对应的原 始文件的名字。 例如: Vim -r .help.txt.swo 这个方法在交换文件在一个非预期的目录中时很有用。如果这还不行,看看 Vim 报告的 文件名是什么,然后根据需要修改一下。根据 'directory' 选项的值你可以知道 Vim 会 把交换文件放到什么地方。 备注: Vim 在 'dir' 选项指定的目录中寻找名为 "filename.sw?" 的交换文件。如果通 配符不能正常工作(例如 'shell' 选项不正确),Vim 转而尝试文件 "filename.swp"。如果仍失败,你就只能通过给定交换文件的名称来恢复原 来的文件了。

*11.3* 是不是崩溃了? *ATTENTION* *E325*

Vim 尽可能保护你不要做傻事。有时你打开一个文件,天真地以为文件的内容会显示出 来。可是,Vim 却给出一段很长的信息: E325: ATTENTION Found a swap file by the name ".main.c.swp" owned by: mool dated: Tue May 29 21:09:28 2001 file name: ~mool/vim/vim6/src/main.c modified: no user name: mool host name: masaka.moolenaar.net process ID: 12559 (still running) While opening file "main.c" dated: Tue May 29 19:46:12 2001 (1) Another program may be editing the same file. If this is the case, be careful not to end up with two different instances of the same file when making changes. Quit, or continue with caution. (2) An edit session for this file crashed. If this is the case, use ":recover" or "vim -r main.c" to recover the changes (see ":help recovery"). If you did this already, delete the swap file ".main.c.swp" to avoid this message. 译者注:翻译成中文如下: E325: 注意 在打开"main.c"文件的时候找到一个名为".main.c.swp"的交换文件 所有者:mool 日期戳:2001年5月29日 星期二 21:09:28 文件名:~mool/vim/vim6/src/main.c 被修改:否 用户名:mool 主机名:masaka.moolenaar.net 进程号:12559(仍在运行) 打开时间:2001年5月29日 星期二 19:46:12 (1) 可能有另一个程序在编辑这个文件。 如果是这种情况,小心不要对同一个文件都执行修改操作。 请退出或者非常小心地继续下去。 (2) 对这个文件执行编辑的一个会话异常中止了。 如果是这种情况,使用":recover"或者"vim -r main.c"恢复修改 (参见":help recovery")。 如果你已经这样做了,请删除交换文件".main.c.swp"以免本信息再次 出现。 ) 你遇到这个信息是因为 Vim 发现你编辑的文件的交换文件已经存在。这一定是有什么 地方出问题了。可能的原因原因有两个: 1. 这个文件正在被另一个进程编辑。注意有 "process ID" 那行。它看起来是这样的: process ID: 12559 (still running) "still running" 表示同一台计算机上有一个进程正在编辑这个文件。在非 Unix 的 系统上你不会得到这个信息。而如果你通过网络编辑这个文件,可能也得不到这个信 息,因为那个进程不在你的机器上。在这两种情况下,你要自己找到原因。 如果另一个 Vim 正在编辑这个文件,继续编辑会导致同一个文件有两个版本。最 后存盘的文件会覆盖前一个版本。这样的结果是一些编辑数据丢失了。这种情况下, 你最好退出这个 Vim。 2. 交换文件可能是由于前一次 Vim 或者计算机崩溃导致的。检查提示信息中的日期。如 果交换文件比你正在编辑的文件新,而且出现这个信息: modified: YES 这就表明你很可能需要恢复了。 如果文件的日期比交换文件新,可能是在崩溃后被修改过了。或者是你已经恢复 过,只是没有删除交换文件?Vim 会用如下语句提醒你: NEWER than swap file! 译者注:意为 "文件比交换文件新") 无 法 读 取 的 交 换 文 件 有时下面这样的信息 [cannot be read] 会出现在交换文件的文件名之下。这可好可坏,依情况而定。 如果上次编辑在作出任何修改前就崩溃了的话,是好事。这样交换文件的长度为 0。 你只要删除之然后继续即可。 如果情况是你对交换文件没有读权限,就比较糟糕。你可能得以只读方式浏览该文件。 或者退出。在多用户系统中,如果你以别人的身份登陆并做了上一次修改,然后以你 自己登陆可能会引起读取错误。不然的话你得找出是谁做的上一次修改然后和那个人 聊聊。 如果情况是交换文件所在的磁盘不物理性地损坏了,就非常糟糕了。幸运的是,这种 情况几乎不会发生。你可能需要以只读方式查看文件,看看到底有多少改动被 "忘记" 了。如果你是改动文件的那个人,准备好重作你的改动。 怎 么 办? 如果 Vim 版本支持对话框,你可以从对话框的五个选择中挑一个: Swap file ".main.c.swp" already exists! [O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort, (D)elete it: 译者:含义是: 交换文件 ".main.c.swp" 已经存在! [O]以只读方式打开,(E)无条件编辑,(R)恢复,(Q)退出,(A)中止,(D)删除交换文件: ) O 用只读方式打开文件。当你只是想看看文件的内容,而不打算恢复它的时候用这个选 项。你可能知道有人在编辑它,但你想看看它的内容,而不会修改它。 E 无条件编辑。小心使用这个选择!如果这个文件已经被另一个文件打开,你编辑它会 导致它有两个版本。Vim 已经警告过你了,安全比事后说对不起要好。 R 从交换文件中恢复文件。如果你知道交换文件中有新的东西,而你想恢复它,选择这 一项。 Q 退出。不再编辑该文件。在有另一个 Vim 编辑该文件的时候选这一项。 如果你刚打开 Vim,这会退出 Vim。当你用多个窗口打开几个文件,Vim 只会在 第一个文件遇到交换文件的时候退出。如果你是通过编辑命令打开文件,该文件不会 被载入,Vim 会回到原来的文件中。 A 中止。类似 (Q)退出,但同时中止更多的命令。这在试图加载一个编辑多个文件的脚本 (例如一个多窗口的会话) 时很有用。 D 删除交换文件。当你能确定你不再需要它的时候选这一项。例如,它不包括修改的数 据,或者你的文件比交换文件新。 在 Unix 系统中,只有建立这个交换文件的进程不再运行,这个选择才会出现。 如果没有出现对话框(你使用的 Vim 不支持对话框),你只能手工处理。要恢复一个文件, 使用如下命令: :recover Vim 不是总能检测到一个文件的交换文件的。当另一个会话把交换文件放到别的位置或者 在编辑另一台机器的文件的时候,双方使用的交换文件路径不一样都会发生这个问题。 所以,不要老是等 Vim 来提醒你。 如果你确实不想看到这个信息,你可以在 'shortmess' 选项中加上 'A' 标志。不过一般 你不需要这样做。

*11.4* 深入阅读

|swap-file| 解释交换文件在什么地方创建以及名字是什么。 |:preserve| 手工刷新交换文件 |:swapname| 查看当前文件的交换文件 'updatecount' 多少个键被敲下后执行一次交换文件刷新 'updatetime' 交换文件刷新后的超时时间 'swapsync' 交换文件刷新后是否执行磁盘同步 'directory' 列出用于保存交换文件的目录 'maxmem' 写入交换文件前的内存使用限制 'maxmemtot' 同上,当用于所有文件

下一章:|usr_12.txt| 小窍门 版权:参见|manual-copyright| vim:tw=78:ts=8:ft=help:norl:

Generated by vim2html on 2006年 06月 24日 星期六 00:27:59 UTC