-
Notifications
You must be signed in to change notification settings - Fork 28
/
learn-vi-58-swap.html
82 lines (69 loc) · 7.72 KB
/
learn-vi-58-swap.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="learn-vi.css">
<title>VIM学习笔记 交换文件(swap)</title>
</head>
<body>
<p>在编辑文件的过程中,Vim将会在当前目录中自动生成一个以<i>.swp</i>结尾的临时交换文件,用于备份缓冲区中的内容,以便在意外退出时可以恢复之前编辑的内容。</p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">启用/禁用交换文件</p>
<p>可以使用以下命令,设置生成交换文件:</p>
<p style="text-indent:2em"><code class="inset">:set swapfile</code></p>
<p>可以使用以下命令,设置Vim不产生交换文件:</p>
<p style="text-indent:2em"><code class="inset">:set noswapfile</code></p>
<p>注意,以上设置仅针对当前文件生效。</p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">处理交换文件</p>
<p>当完成编辑并保存退出后,临时交换文件将会被删除;但如果Vim意外退出,那么这个临时文件就会留在硬盘中。当Vim再次启动时,会检查当前目录
中是否存在交换文件。如果存在,则意味着Vim正在编辑此文件,或者在上次编辑过程中意外退出,这时Vim就会给出警告信息,并要求我们在以下四个选项中
做出选择:</p>
<ul>
<li><strong>Open Read-Only</strong>(以只读方式打开):如果我们想要查看文件内容或是有另一个编辑过程正在运行,那么可以选择此选项;</li>
<li><strong>Edit anyway</strong>(编辑文件):请尽量不要选择此选项。因为如果同时有两个或是多个编辑过程同时编辑一个文件,那么只有最后一个保存的编辑过程有效;</li>
<li><strong>Recover</strong>(恢复):如果在编辑过程中vim意外退出,那么可以选择此选项尝试从交换文件恢复文档;</li>
<li><strong>Quit</strong>(退出):选择此选项,将取消对此文件的修改。</li>
</ul>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">查看交换文件</p>
<p>Vim意外退出时,并不会覆盖旧的交换文件,而是会重新生成新的交换文件。例如,第一次产生的交换文件名为“.file.txt.swp”;再次
意外退出后,将会产生名为“.file.txt.swo”的交换文件;而第三次产生的交换文件则为“.file.txt.swn”;依此类推。</p>
<p>使用以下命令,可以查看当前交换文件的名称:</p>
<p style="text-indent:2em"><code class="inset">:swapname</code></p>
<p>也可以在命令行中使用以下命令,列示当前目录和临时目录下的交换文件:</p>
<p style="text-indent:2em"><code class="inset">vim -r</code></p>
<p>命令的执行结果,如下图所示:</p>
<p><a href="https://www.flickr.com/photos/yyq123/6802742920/" title="vim -r by yyq123, on Flickr"><img src="https://c2.staticflickr.com/8/7055/6802742920_ced7fe4235_o.png" width="451" height="185" alt="vim -r" /></a></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">交换文件选项</p>
<p>根据默认设置,交换文件会每隔4000毫秒(4秒)或者200个字符保存一次。我们可以使用以下命令,修改保存交换文件的频率:</p>
<p style="text-indent:2em"><code class="inset">:set updatetime=23000</code></p>
<p style="text-indent:2em"><code class="inset">:set updatecount=400</code></p>
<p>注意,如果我们将updatecount的值为0,那么就将不保存交换文件。</p>
<p>Vim默认在当前文件所处的目录下产生交换文件,我们可以通过directory选项来更改交换文件产生的目录。例如,使用以下命令将交换文件存放在/tmp目录下:</p>
<p style="text-indent:2em"><code class="inset">:set directory=/tmp</code></p>
<p>注意,如果我们将交换文件存储在一个指定目录,那么当编辑不同目录下相同名称的文件时,就会产生命名冲突。我们可以将directory选项设置为一个以逗号分隔的目录列表,并将当前目录(.)设为目录列表的第一个选项,这样交换文件首先会被存放在当前目录下。</p>
<p style="text-indent:2em"><code class="inset">:set directory=.,/tmp</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">保存交换文件</p>
<p>使用以下命令,可以保存修改到交换文件中,而原始文件则保持不变(直到使用:write或ZZ命令退出时原始文件才会被重写)。也就是说,我们可以在丢失原始文件的情况下,使用交换文件来恢复文档。</p>
<p style="text-indent:2em"><code class="inset">:preserve</code></p>
<p style="font-weight:bold; border-bottom:1px solid lightgray; border-left:6px solid lightgray; padding:0 0 3px 5px">从交换文件恢复</p>
<p>可以使用以下命令,来修复指定的文件:</p>
<p style="text-indent:2em"><code class="inset">:recover temp.txt</code></p>
<p>如果存在多个交换文件,那么可以根据屏幕提示选择从指定的交换文件恢复:</p>
<p><a href="https://www.flickr.com/photos/yyq123/6948980995/" title="recover by yyq123, on Flickr"><img src="https://c1.staticflickr.com/8/7204/6948980995_2ab0c81d9b.jpg" width="500" height="373" alt="recover" /></a></p>
<p>如果没有指定文件名,那么将默认恢复当前缓冲区中的文件。如果试图修复的文件正处于编辑状态,那么将返回错误。如果想要放弃所做的编辑并修复文档,那么可以使用以下命令进行强制修复:</p>
<p style="text-indent:2em"><code class="inset">:recover! temp.txt</code></p>
<p>在命令行下使用以下命令,可以从指定的交换文件进行恢复:</p>
<p style="text-indent:2em"><code class="inset">vim -r file.txt.swo</code></p>
<p>你可以使用以下命令,查看关于交换文件的帮助信息:</p>
<p style="text-indent:2em"><code class="inset">:help swap-file</code></p>
<table summary="Commands" frame="hsides" rules="all" cellspacing="0" cellpadding="3" border="2">
<caption>命令小结</caption>
<tbody><tr><td><code class="inset">:swapname</code></td><td>查看当前交换文件的名称</td></tr>
<tr><td><code class="inset">:preserve</code></td><td>保存修改到交换文件</td></tr>
<tr><td><code class="inset">:recover</code></td><td>从交换文件恢复</td></tr>
<tr><td><code class="inset">:set swapfile</code></td><td>启用交换文件</td></tr>
<tr><td><code class="inset">:set noswapfile</code></td><td>禁用交换文件</td></tr>
<tr><td><code class="inset">:set updatetime</code></td><td>设置保存交换文件的时间频率</td></tr>
<tr><td><code class="inset">:set updatecount<code></code></code></td><td>设置保存交换文件的字数频率</td></tr>
<tr><td><code class="inset">:set directory<code></code></code></td><td>设置用于保存交换文件的文件夹</td></tr>
</tbody></table>
<p style="border-top:1px solid lightgray"><span style="float:right">Ver: 1.0</span><span><<a title="备份文件(Backup)" href="https://yyq123.blogspot.com/2011/11/vim-backup.html">上一篇</a> |<a title="笔记列表" href="https://yyq123.github.com/learn-vim/learn-vi-00-List.html"> 目录 </a>| <a title="配置文件(vimrc)" href="https://yyq123.blogspot.com/2012/01/vim-vimrc.html">下一篇</a>></span></p>
</body></html>