| *recover.txt* For Vim version 7.0aa. Last change: 2005 Feb 10 |
| |
| |
| VIM REFERENCE MANUAL by Bram Moolenaar |
| |
| |
| Recovery after a crash *crash-recovery* |
| |
| You have spent several hours typing in that text that has to be finished |
| next morning, and then disaster strikes: Your computer crashes. |
| |
| DON'T PANIC! |
| |
| You can recover most of your changes from the files that Vim uses to store |
| the contents of the file. Mostly you can recover your work with one command: |
| vim -r filename |
| |
| 1. The swap file |swap-file| |
| 2. Recovery |recovery| |
| |
| ============================================================================== |
| 1. The swap file *swap-file* |
| |
| Vim stores the things you changed in a swap file. Using the original file |
| you started from plus the swap file you can mostly recover your work. |
| |
| You can see the name of the current swap file being used with the command: |
| |
| :sw[apname] *:sw* *:swapname* |
| |
| The name of the swap file is normally the same as the file you are editing, |
| with the extension ".swp". |
| - On Unix, a '.' is prepended to swap file names in the same directory as the |
| edited file. This avoids that the swap file shows up in a directory |
| listing. |
| - On MS-DOS machines and when the 'shortname' option is on, any '.' in the |
| original file name is replaced with '_'. |
| - If this file already exists (e.g., when you are recovering from a crash) a |
| warning is given and another extension is used, ".swo", ".swn", etc. |
| - An existing file will never be overwritten. |
| - The swap file is deleted as soon as Vim stops editing the file. |
| |
| Technical: The replacement of '.' with '_' is done to avoid problems with |
| MS-DOS compatible filesystems (e.g., crossdos, multidos). If Vim |
| is able to detect that the file is on an MS-DOS-like filesystem, a |
| flag is set that has the same effect as the 'shortname' option. |
| This flag is reset when you start editing another file. |
| *E326* |
| If the ".swp" file name already exists, the last character is |
| decremented until there is no file with that name or ".saa" is |
| reached. In the last case, no swap file is created. |
| |
| By setting the 'directory' option you can place the swap file in another place |
| than where the edited file is. |
| Advantages: |
| - You will not pollute the directories with ".swp" files. |
| - When the 'directory' is on another partition, reduce the risk of damaging |
| the file system where the file is (in a crash). |
| Disadvantages: |
| - You can get name collisions from files with the same name but in different |
| directories (although Vim tries to avoid that by comparing the path name). |
| This will result in bogus ATTENTION warning messages. |
| - When you use your home directory, and somebody else tries to edit the same |
| file, he will not see your swap file and will not get the ATTENTION warning |
| message. |
| On the Amiga you can also use a recoverable ram disk, but there is no 100% |
| guarantee that this works. Putting swap files in a normal ram disk (like RAM: |
| on the Amiga) or in a place that is cleared when rebooting (like /tmp on Unix) |
| makes no sense, you will lose the swap file in a crash. |
| |
| If you want to put swap files in a fixed place, put a command resembling the |
| following ones in your .vimrc: |
| :set dir=dh2:tmp (for Amiga) |
| :set dir=~/tmp (for Unix) |
| :set dir=c:\\tmp (for MS-DOS and Win32) |
| This is also very handy when editing files on floppy. Of course you will have |
| to create that "tmp" directory for this to work! |
| |
| For read-only files, a swap file is not used. Unless the file is big, causing |
| the amount of memory used to be higher than given with 'maxmem' or |
| 'maxmemtot'. And when making a change to a read-only file, the swap file is |
| created anyway. |
| |
| The 'swapfile' option can be reset to avoid creating a swapfile. |
| |
| |
| Detecting an existing swap file ~ |
| |
| You can find this in the user manual, section |11.3|. |
| |
| |
| Updating the swapfile ~ |
| |
| The swap file is updated after typing 200 characters or when you have not |
| typed anything for four seconds. This only happens if the buffer was |
| changed, not when you only moved around. The reason why it is not kept up to |
| date all the time is that this would slow down normal work too much. You can |
| change the 200 character count with the 'updatecount' option. You can set |
| the time with the 'updatetime' option. The time is given in milliseconds. |
| After writing to the swap file Vim syncs the file to disk. This takes some |
| time, especially on busy Unix systems. If you don't want this you can set the |
| 'swapsync' option to an empty string. The risk of losing work becomes bigger |
| though. On some non-Unix systems (MS-DOS, Amiga) the swap file won't be |
| written at all. |
| |
| If the writing to the swap file is not wanted, it can be switched off by |
| setting the 'updatecount' option to 0. The same is done when starting Vim |
| with the "-n" option. Writing can be switched back on by setting the |
| 'updatecount' option to non-zero. Swap files will be created for all buffers |
| when doing this. But when setting 'updatecount' to zero, the existing swap |
| files will not be removed, it will only affect files that will be opened |
| after this. |
| |
| If you want to make sure that your changes are in the swap file use this |
| command: |
| |
| *:pre* *:preserve* *E313* *E314* |
| :pre[serve] Write all text for all buffers into swap file. The |
| original file is no longer needed for recovery. |
| This sets a flag in the current buffer. When the '&' |
| flag is present in 'cpoptions' the swap file will not |
| be deleted for this buffer when Vim exits and the |
| buffer is still loaded |cpo-&|. |
| {Vi: might also exit} |
| |
| A Vim swap file can be recognized by the first six characters: "b0VIM ". |
| After that comes the version number, e.g., "3.0". |
| |
| ============================================================================== |
| 2. Recovery *recovery* *E308* *E311* |
| |
| Basic file recovery is explained in the user manual: |usr_11.txt|. |
| |
| Another way to do recovery is to start Vim and use the ":recover" command. |
| This is easy when you start Vim to edit a file and you get the "ATTENTION: |
| Found a swap file ..." message. In this case the single command ":recover" |
| will do the work. You can also give the name of the file or the swap file to |
| the recover command: |
| *:rec* *:recover* *E305* *E306* *E307* |
| :rec[over] [file] Try to recover [file] from the swap file. If [file] |
| is not given use the file name for the current |
| buffer. The current contents of the buffer are lost. |
| This command fails if the buffer was modified. |
| |
| :rec[over]! [file] Like ":recover", but any changes in the current |
| buffer are lost. |
| |
| *E312* *E309* *E310* |
| Vim has some intelligence about what to do if the swap file is corrupt in |
| some way. If Vim has doubt about what it found, it will give an error |
| message and insert lines with "???" in the text. If you see an error message |
| while recovering, search in the file for "???" to see what is wrong. You may |
| want to cut and paste to get the text you need. |
| |
| The most common remark is "???LINES MISSING". This means that Vim cannot read |
| the text from the original file. This can happen if the system crashed and |
| parts of the original file were not written to disk. |
| |
| Be sure that the recovery was successful before overwriting the original |
| file or deleting the swap file. It is good practice to write the recovered |
| file elsewhere and run 'diff' to find out if the changes you want are in the |
| recovered file. |
| |
| Once you are sure the recovery is ok delete the swap file. Otherwise, you |
| will continue to get warning messages that the ".swp" file already exists. |
| |
| {Vi: recovers in another way and sends mail if there is something to recover} |
| |
| vim:tw=78:ts=8:ft=help:norl: |