星期六, 三月 03, 2012

VIM学习笔记 交换文件(swap)

在编辑文件的过程中,Vim将会在当前目录中自动生成一个以.swp结尾的临时交换文件,用于备份缓冲区中的内容,以便在意外退出时可以恢复之前编辑的内容。

启用/禁用交换文件

可以使用以下命令,设置生成交换文件:

:set swapfile

可以使用以下命令,设置Vim不产生交换文件:

:set noswapfile

注意,以上设置仅针对当前文件生效。

处理交换文件

当完成编辑并保存退出后,临时交换文件将会被删除;但如果Vim意外退出,那么这个临时文件就会留在硬盘中。当Vim再次启动时,会检查当前目录中是否存在交换文件。如果存在,则意味着Vim正在编辑此文件,或者在上次编辑过程中意外退出,这时Vim就会给出警告信息,并要求我们在以下四个选项中做出选择:

  • Open Read-Only(以只读方式打开):如果我们想要查看文件内容或是有另一个编辑过程正在运行,那么可以选择此选项;
  • Edit anyway(编辑文件):请尽量不要选择此选项。因为如果同时有两个或是多个编辑过程同时编辑一个文件,那么只有最后一个保存的编辑过程有效;
  • Recover(恢复):如果在编辑过程中vim意外退出,那么可以选择此选项尝试从交换文件恢复文档;
  • Quit(退出):选择此选项,将取消对此文件的修改。

查看交换文件

Vim意外退出时,并不会覆盖旧的交换文件,而是会重新生成新的交换文件。例如,第一次产生的交换文件名为“.file.txt.swp”;再次意外退出后,将会产生名为“.file.txt.swo”的交换文件;而第三次产生的交换文件则为“.file.txt.swn”;依此类推。

使用以下命令,可以查看当前交换文件的名称:

:swapname

也可以在命令行中使用以下命令,列示当前目录和临时目录下的交换文件:

vim -r

命令的执行结果,如下图所示:

vim -r

交换文件选项

根据默认设置,交换文件会每隔4000毫秒(4秒)或者200个字符保存一次。我们可以使用以下命令,修改保存交换文件的频率:

:set updatetime=23000

:set updatecount=400

注意,如果我们将updatecount的值为0,那么就将不保存交换文件。

Vim默认在当前文件所处的目录下产生交换文件,我们可以通过directory选项来更改交换文件产生的目录。例如,使用以下命令将交换文件存放在/tmp目录下:

:set directory=/tmp

注意,如果我们将交换文件存储在一个指定目录,那么当编辑不同目录下相同名称的文件时,就会产生命名冲突。我们可以将directory选项设置为一个以逗号分隔的目录列表,并将当前目录(.)设为目录列表的第一个选项,这样交换文件首先会被存放在当前目录下。

:set directory=.,/tmp

保存交换文件

使用以下命令,可以保存修改到交换文件中,而原始文件则保持不变(直到使用:write或ZZ命令退出时原始文件才会被重写)。也就是说,我们可以在丢失原始文件的情况下,使用交换文件来恢复文档。

:preserve

从交换文件恢复

可以使用以下命令,来修复指定的文件:

:recover temp.txt

如果存在多个交换文件,那么可以根据屏幕提示选择从指定的交换文件恢复:

recover

如果没有指定文件名,那么将默认恢复当前缓冲区中的文件。如果试图修复的文件正处于编辑状态,那么将返回错误。如果想要放弃所做的编辑并修复文档,那么可以使用以下命令进行强制修复:

:recover! temp.txt

在命令行下使用以下命令,可以从指定的交换文件进行恢复:

vim -r file.txt.swo

你可以使用以下命令,查看关于交换文件的帮助信息:

:help swap-file

命令小结
:swapname查看当前交换文件的名称
:preserve保存修改到交换文件
:recover从交换文件恢复
:set swapfile启用交换文件
:set noswapfile禁用交换文件
:set updatetime设置保存交换文件的时间频率
:set updatecount设置保存交换文件的字数频率
:set directory设置用于保存交换文件的文件夹

Ver: 1.0<上一篇 | 目录 下一篇>