在编辑文件的过程中,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
命令的执行结果,如下图所示:
交换文件选项
根据默认设置,交换文件会每隔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! temp.txt
在命令行下使用以下命令,可以从指定的交换文件进行恢复:
vim -r file.txt.swo
你可以使用以下命令,查看关于交换文件的帮助信息:
:help swap-file
:swapname | 查看当前交换文件的名称 |
:preserve | 保存修改到交换文件 |
:recover | 从交换文件恢复 |
:set swapfile | 启用交换文件 |
:set noswapfile | 禁用交换文件 |
:set updatetime | 设置保存交换文件的时间频率 |
:set updatecount | 设置保存交换文件的字数频率 |
:set directory | 设置用于保存交换文件的文件夹 |
没有评论:
发表评论