blob: fd817ebc6269a09ee8a07da35298b3cf4fdda885 [file] [log] [blame]
Christian Brabandtb4ddc6c2024-01-02 16:51:11 +01001*recover.txt* For Vim version 9.1. Last change: 2023 Apr 22
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
Bram Moolenaar95bafa22018-10-02 13:26:25 +020031Or you can use the |swapname()| function, which also allows for seeing the
32swap file name of other buffers.
33
Bram Moolenaar071d4272004-06-13 20:20:40 +000034The name of the swap file is normally the same as the file you are editing,
35with the extension ".swp".
36- On Unix, a '.' is prepended to swap file names in the same directory as the
37 edited file. This avoids that the swap file shows up in a directory
38 listing.
Bram Moolenaar5666fcd2019-12-26 14:35:26 +010039- On MS-Windows machines and when the 'shortname' option is on, any '.' in the
Bram Moolenaar071d4272004-06-13 20:20:40 +000040 original file name is replaced with '_'.
41- If this file already exists (e.g., when you are recovering from a crash) a
42 warning is given and another extension is used, ".swo", ".swn", etc.
43- An existing file will never be overwritten.
44- The swap file is deleted as soon as Vim stops editing the file.
45
46Technical: The replacement of '.' with '_' is done to avoid problems with
47 MS-DOS compatible filesystems (e.g., crossdos, multidos). If Vim
48 is able to detect that the file is on an MS-DOS-like filesystem, a
49 flag is set that has the same effect as the 'shortname' option.
50 This flag is reset when you start editing another file.
51 *E326*
52 If the ".swp" file name already exists, the last character is
53 decremented until there is no file with that name or ".saa" is
54 reached. In the last case, no swap file is created.
55
56By setting the 'directory' option you can place the swap file in another place
57than where the edited file is.
58Advantages:
59- You will not pollute the directories with ".swp" files.
60- When the 'directory' is on another partition, reduce the risk of damaging
61 the file system where the file is (in a crash).
62Disadvantages:
63- You can get name collisions from files with the same name but in different
64 directories (although Vim tries to avoid that by comparing the path name).
65 This will result in bogus ATTENTION warning messages.
66- When you use your home directory, and somebody else tries to edit the same
Bram Moolenaar3d1cde82020-08-15 18:55:18 +020067 file, that user will not see your swap file and will not get the ATTENTION
68 warning message.
Bram Moolenaar071d4272004-06-13 20:20:40 +000069On the Amiga you can also use a recoverable ram disk, but there is no 100%
70guarantee that this works. Putting swap files in a normal ram disk (like RAM:
71on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix)
72makes no sense, you will lose the swap file in a crash.
73
74If you want to put swap files in a fixed place, put a command resembling the
75following ones in your .vimrc:
76 :set dir=dh2:tmp (for Amiga)
77 :set dir=~/tmp (for Unix)
Bram Moolenaar5666fcd2019-12-26 14:35:26 +010078 :set dir=c:\\tmp (for Win32)
Bram Moolenaar071d4272004-06-13 20:20:40 +000079This is also very handy when editing files on floppy. Of course you will have
80to create that "tmp" directory for this to work!
81
82For read-only files, a swap file is not used. Unless the file is big, causing
83the amount of memory used to be higher than given with 'maxmem' or
84'maxmemtot'. And when making a change to a read-only file, the swap file is
85created anyway.
86
Bram Moolenaar5803ae62014-03-23 16:04:02 +010087The 'swapfile' option can be reset to avoid creating a swapfile. And the
88|:noswapfile| modifier can be used to not create a swapfile for a new buffer.
89
Bram Moolenaar7e38ea22014-04-05 22:55:53 +020090:nos[wapfile] {command} *:nos* *:noswapfile*
Bram Moolenaar5803ae62014-03-23 16:04:02 +010091 Execute {command}. If it contains a command that loads a new
92 buffer, it will be loaded without creating a swapfile and the
93 'swapfile' option will be reset. If a buffer already had a
94 swapfile it is not removed and 'swapfile' is not reset.
Bram Moolenaar071d4272004-06-13 20:20:40 +000095
96
97Detecting an existing swap file ~
98
99You can find this in the user manual, section |11.3|.
100
101
102Updating the swapfile ~
103
104The swap file is updated after typing 200 characters or when you have not
105typed anything for four seconds. This only happens if the buffer was
106changed, not when you only moved around. The reason why it is not kept up to
107date all the time is that this would slow down normal work too much. You can
108change the 200 character count with the 'updatecount' option. You can set
109the time with the 'updatetime' option. The time is given in milliseconds.
110After writing to the swap file Vim syncs the file to disk. This takes some
111time, especially on busy Unix systems. If you don't want this you can set the
112'swapsync' option to an empty string. The risk of losing work becomes bigger
Bram Moolenaar5666fcd2019-12-26 14:35:26 +0100113though. On some non-Unix systems (MS-Windows, Amiga) the swap file won't be
Bram Moolenaar071d4272004-06-13 20:20:40 +0000114written at all.
115
116If the writing to the swap file is not wanted, it can be switched off by
117setting the 'updatecount' option to 0. The same is done when starting Vim
118with the "-n" option. Writing can be switched back on by setting the
119'updatecount' option to non-zero. Swap files will be created for all buffers
120when doing this. But when setting 'updatecount' to zero, the existing swap
121files will not be removed, it will only affect files that will be opened
122after this.
123
124If you want to make sure that your changes are in the swap file use this
125command:
126
127 *:pre* *:preserve* *E313* *E314*
Bram Moolenaar47e13952020-05-12 22:49:12 +0200128:pre[serve] Write all text for the current buffer into its swap
129 file. The original file is no longer needed for
130 recovery. This sets a flag in the current buffer.
131 When the '&' flag is present in 'cpoptions' the swap
132 file will not be deleted for this buffer when Vim
133 exits and the buffer is still loaded |cpo-&|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000134
135A Vim swap file can be recognized by the first six characters: "b0VIM ".
136After that comes the version number, e.g., "3.0".
137
Bram Moolenaar2c7a29c2005-12-12 22:02:31 +0000138
139Links and symbolic links ~
140
141On Unix it is possible to have two names for the same file. This can be done
142with hard links and with symbolic links (symlinks).
143
144For hard links Vim does not know the other name of the file. Therefore, the
145name of the swapfile will be based on the name you used to edit the file.
146There is no check for editing the same file by the other name too, because Vim
147cannot find the other swapfile (except for searching all of your harddisk,
148which would be very slow).
149
150For symbolic links Vim resolves the links to find the name of the actual file.
151The swap file name is based on that name. Thus it doesn't matter by what name
152you edit the file, the swap file name will normally be the same. However,
153there are exceptions:
154- When the directory of the actual file is not writable the swapfile is put
155 elsewhere.
156- When the symbolic links somehow create a loop you get an *E773* error
157 message and the unmodified file name will be used. You won't be able to
158 save your file normally.
159
Bram Moolenaar071d4272004-06-13 20:20:40 +0000160==============================================================================
1612. Recovery *recovery* *E308* *E311*
162
163Basic file recovery is explained in the user manual: |usr_11.txt|.
164
165Another way to do recovery is to start Vim and use the ":recover" command.
166This is easy when you start Vim to edit a file and you get the "ATTENTION:
167Found a swap file ..." message. In this case the single command ":recover"
168will do the work. You can also give the name of the file or the swap file to
169the recover command:
170 *:rec* *:recover* *E305* *E306* *E307*
171:rec[over] [file] Try to recover [file] from the swap file. If [file]
172 is not given use the file name for the current
173 buffer. The current contents of the buffer are lost.
174 This command fails if the buffer was modified.
175
176:rec[over]! [file] Like ":recover", but any changes in the current
177 buffer are lost.
178
Bram Moolenaar71badf92023-04-22 22:40:14 +0100179 *E312* *E309* *E310* *E1364*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000180Vim has some intelligence about what to do if the swap file is corrupt in
181some way. If Vim has doubt about what it found, it will give an error
182message and insert lines with "???" in the text. If you see an error message
183while recovering, search in the file for "???" to see what is wrong. You may
184want to cut and paste to get the text you need.
185
186The most common remark is "???LINES MISSING". This means that Vim cannot read
187the text from the original file. This can happen if the system crashed and
188parts of the original file were not written to disk.
189
190Be sure that the recovery was successful before overwriting the original
191file or deleting the swap file. It is good practice to write the recovered
192file elsewhere and run 'diff' to find out if the changes you want are in the
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100193recovered file. Or use |:DiffOrig|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000194
195Once you are sure the recovery is ok delete the swap file. Otherwise, you
196will continue to get warning messages that the ".swp" file already exists.
197
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198
Bram Moolenaara8ffcbb2010-06-21 06:15:46 +0200199
200ENCRYPTION AND THE SWAP FILE *:recover-crypt*
201
202When the text file is encrypted the swap file is encrypted as well. This
203makes recovery a bit more complicated. When recovering from a swap file and
204encryption has been used, you will be asked to enter one or two crypt keys.
205
206If the text file does not exist you will only be asked to enter the crypt key
207for the swap file.
208
209If the text file does exist, it may be encrypted in a different way than the
210swap file. You will be asked for the crypt key twice:
211
212 Need encryption key for "/tmp/tt" ~
213 Enter encryption key: ****** ~
214 "/tmp/tt" [crypted] 23200L, 522129C ~
215 Using swap file "/tmp/.tt.swp" ~
216 Original file "/tmp/tt" ~
217 Swap file is encrypted: "/tmp/.tt.swp" ~
218 If you entered a new crypt key but did not write the text file, ~
219 enter the new crypt key. ~
220 If you wrote the text file after changing the crypt key press enter ~
221 to use the same key for text file and swap file ~
222 Enter encryption key: ~
223
224You can be in one of these two situations:
225
2261. The encryption key was not changed, or after changing the key the text file
227 was written. You will be prompted for the crypt key twice. The second
228 time you can simply press Enter. That means the same key is used for the
229 text file and the swap file.
2302. You entered a new encryption key, but did not save the text file. Vim will
231 then use the new key for the swap file, and the text file will still be
232 encrypted with the old key. At the second prompt enter the new key.
233
234Note that after recovery the key of the swap file will be used for the text
235file. Thus if you write the text file, you need to use that new key.
236
237
Bram Moolenaar91f84f62018-07-29 15:07:52 +0200238 vim:tw=78:ts=8:noet:ft=help:norl: