blob: fd960eb121ecdf7f914440cff3dd7734f436d017 [file] [log] [blame]
Bram Moolenaarfff2bee2010-05-15 13:56:02 +02001*recover.txt* For Vim version 7.3a. Last change: 2009 Apr 18
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Recovery after a crash *crash-recovery*
8
9You have spent several hours typing in that text that has to be finished
10next morning, and then disaster strikes: Your computer crashes.
11
12 DON'T PANIC!
13
14You can recover most of your changes from the files that Vim uses to store
15the contents of the file. Mostly you can recover your work with one command:
16 vim -r filename
17
181. The swap file |swap-file|
192. Recovery |recovery|
20
21==============================================================================
221. The swap file *swap-file*
23
24Vim stores the things you changed in a swap file. Using the original file
25you started from plus the swap file you can mostly recover your work.
26
27You can see the name of the current swap file being used with the command:
28
29 :sw[apname] *:sw* *:swapname*
30
31The name of the swap file is normally the same as the file you are editing,
32with the extension ".swp".
33- On Unix, a '.' is prepended to swap file names in the same directory as the
34 edited file. This avoids that the swap file shows up in a directory
35 listing.
36- On MS-DOS machines and when the 'shortname' option is on, any '.' in the
37 original file name is replaced with '_'.
38- If this file already exists (e.g., when you are recovering from a crash) a
39 warning is given and another extension is used, ".swo", ".swn", etc.
40- An existing file will never be overwritten.
41- The swap file is deleted as soon as Vim stops editing the file.
42
43Technical: The replacement of '.' with '_' is done to avoid problems with
44 MS-DOS compatible filesystems (e.g., crossdos, multidos). If Vim
45 is able to detect that the file is on an MS-DOS-like filesystem, a
46 flag is set that has the same effect as the 'shortname' option.
47 This flag is reset when you start editing another file.
48 *E326*
49 If the ".swp" file name already exists, the last character is
50 decremented until there is no file with that name or ".saa" is
51 reached. In the last case, no swap file is created.
52
53By setting the 'directory' option you can place the swap file in another place
54than where the edited file is.
55Advantages:
56- You will not pollute the directories with ".swp" files.
57- When the 'directory' is on another partition, reduce the risk of damaging
58 the file system where the file is (in a crash).
59Disadvantages:
60- You can get name collisions from files with the same name but in different
61 directories (although Vim tries to avoid that by comparing the path name).
62 This will result in bogus ATTENTION warning messages.
63- When you use your home directory, and somebody else tries to edit the same
Bram Moolenaar69a7cb42004-06-20 12:51:53 +000064 file, he will not see your swap file and will not get the ATTENTION warning
Bram Moolenaar071d4272004-06-13 20:20:40 +000065 message.
66On the Amiga you can also use a recoverable ram disk, but there is no 100%
67guarantee that this works. Putting swap files in a normal ram disk (like RAM:
68on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix)
69makes no sense, you will lose the swap file in a crash.
70
71If you want to put swap files in a fixed place, put a command resembling the
72following ones in your .vimrc:
73 :set dir=dh2:tmp (for Amiga)
74 :set dir=~/tmp (for Unix)
75 :set dir=c:\\tmp (for MS-DOS and Win32)
76This is also very handy when editing files on floppy. Of course you will have
77to create that "tmp" directory for this to work!
78
79For read-only files, a swap file is not used. Unless the file is big, causing
80the amount of memory used to be higher than given with 'maxmem' or
81'maxmemtot'. And when making a change to a read-only file, the swap file is
82created anyway.
83
84The 'swapfile' option can be reset to avoid creating a swapfile.
85
86
87Detecting an existing swap file ~
88
89You can find this in the user manual, section |11.3|.
90
91
92Updating the swapfile ~
93
94The swap file is updated after typing 200 characters or when you have not
95typed anything for four seconds. This only happens if the buffer was
96changed, not when you only moved around. The reason why it is not kept up to
97date all the time is that this would slow down normal work too much. You can
98change the 200 character count with the 'updatecount' option. You can set
99the time with the 'updatetime' option. The time is given in milliseconds.
100After writing to the swap file Vim syncs the file to disk. This takes some
101time, especially on busy Unix systems. If you don't want this you can set the
102'swapsync' option to an empty string. The risk of losing work becomes bigger
103though. On some non-Unix systems (MS-DOS, Amiga) the swap file won't be
104written at all.
105
106If the writing to the swap file is not wanted, it can be switched off by
107setting the 'updatecount' option to 0. The same is done when starting Vim
108with the "-n" option. Writing can be switched back on by setting the
109'updatecount' option to non-zero. Swap files will be created for all buffers
110when doing this. But when setting 'updatecount' to zero, the existing swap
111files will not be removed, it will only affect files that will be opened
112after this.
113
114If you want to make sure that your changes are in the swap file use this
115command:
116
117 *:pre* *:preserve* *E313* *E314*
118:pre[serve] Write all text for all buffers into swap file. The
Bram Moolenaar4399ef42005-02-12 14:29:27 +0000119 original file is no longer needed for recovery.
120 This sets a flag in the current buffer. When the '&'
121 flag is present in 'cpoptions' the swap file will not
122 be deleted for this buffer when Vim exits and the
123 buffer is still loaded |cpo-&|.
124 {Vi: might also exit}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
126A Vim swap file can be recognized by the first six characters: "b0VIM ".
127After that comes the version number, e.g., "3.0".
128
Bram Moolenaar2c7a29c2005-12-12 22:02:31 +0000129
130Links and symbolic links ~
131
132On Unix it is possible to have two names for the same file. This can be done
133with hard links and with symbolic links (symlinks).
134
135For hard links Vim does not know the other name of the file. Therefore, the
136name of the swapfile will be based on the name you used to edit the file.
137There is no check for editing the same file by the other name too, because Vim
138cannot find the other swapfile (except for searching all of your harddisk,
139which would be very slow).
140
141For symbolic links Vim resolves the links to find the name of the actual file.
142The swap file name is based on that name. Thus it doesn't matter by what name
143you edit the file, the swap file name will normally be the same. However,
144there are exceptions:
145- When the directory of the actual file is not writable the swapfile is put
146 elsewhere.
147- When the symbolic links somehow create a loop you get an *E773* error
148 message and the unmodified file name will be used. You won't be able to
149 save your file normally.
150
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151==============================================================================
1522. Recovery *recovery* *E308* *E311*
153
154Basic file recovery is explained in the user manual: |usr_11.txt|.
155
156Another way to do recovery is to start Vim and use the ":recover" command.
157This is easy when you start Vim to edit a file and you get the "ATTENTION:
158Found a swap file ..." message. In this case the single command ":recover"
159will do the work. You can also give the name of the file or the swap file to
160the recover command:
161 *:rec* *:recover* *E305* *E306* *E307*
162:rec[over] [file] Try to recover [file] from the swap file. If [file]
163 is not given use the file name for the current
164 buffer. The current contents of the buffer are lost.
165 This command fails if the buffer was modified.
166
167:rec[over]! [file] Like ":recover", but any changes in the current
168 buffer are lost.
169
170 *E312* *E309* *E310*
171Vim has some intelligence about what to do if the swap file is corrupt in
172some way. If Vim has doubt about what it found, it will give an error
173message and insert lines with "???" in the text. If you see an error message
174while recovering, search in the file for "???" to see what is wrong. You may
175want to cut and paste to get the text you need.
176
177The most common remark is "???LINES MISSING". This means that Vim cannot read
178the text from the original file. This can happen if the system crashed and
179parts of the original file were not written to disk.
180
181Be sure that the recovery was successful before overwriting the original
182file or deleting the swap file. It is good practice to write the recovered
183file elsewhere and run 'diff' to find out if the changes you want are in the
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100184recovered file. Or use |:DiffOrig|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
186Once you are sure the recovery is ok delete the swap file. Otherwise, you
187will continue to get warning messages that the ".swp" file already exists.
188
189{Vi: recovers in another way and sends mail if there is something to recover}
190
191 vim:tw=78:ts=8:ft=help:norl: