Uninstalling Vim on Dos and MS-Windows.

There are three ways to remove Vim:

1. With the GUI uninstaller.
   This is only available when Vim was installed with the self-installing
   executable.  This has a minimal number of questions.  It can delete
   everything that was installed.  This also unregisters the VisVim.dll

2. With uninstal.exe.
   This removes most installed items, but does not delete the files you
   unpacked.

3. By hand.
   This is a bit more work, but you can decide exactly what you want to
   remove.  For uninstalling the "Edit with Vim" popup menu entry you still
   have to use uninstal.exe.

It's recommended to use the method that matches with how you installed Vim.
Thus if you installed Vim by hand, delete it by hand.

The first two methods should be available from the Add/Remove software window
and the Vim entry in the Start menu.  If these have been removed already, find
"uninstall-gui.exe" or "uninstal.exe" in the Vim directory.
   Running these programs should be self-explanatory.  Carefully read the
messages to avoid deleting something you want to keep.

Here are guidelines for removing Vim by hand:

1. Remove the "Edit with Vim" popup menu entry, if it exists.  This will only
   be on MS-Windows 95/98/NT.  This is done by running the uninstal.exe
   program.  It removes the registry entries for the "Edit with Vim" popup
   menu entry.  You only need to run uninstal.exe when you have installed the
   menu entry.  You can also run uninstal.exe from the Control panel with the
   Add/Remove programs application.
   Note that uninstal.exe offers you the option to uninstal other items.  You
   can skip this.

2. Only if you have used the OLE version of gvim: Remove the registration of
   this program by running "gvim -unregister" in a console window.

3. Delete the executables.  If you copied the executables to another location,
   you will have to delete them from where you copied them to.  If you don't
   remember where they are, look in the directories from the $PATH environment
   variable.
   If you created .bat files when installing Vim, also search for vim.bat,
   gvim.bat, etc.

4. If you want to completely delete vim, and are not going to install another
   version, you can delete the vimrc files that you created.  These are
   normally located in a directory like "C:\vim".  If the $VIM environment
   variable is set, it will tell the name of the directory.  Normally you can
   delete everything in this directory.  Warning: You might have put some
   files there that you would like to save.  If you did remove it all, you can
   skip the next step.

5. Delete the distributed files.  If you followed the directions, these will
   be located in a directory like "C:\vim\vim80".  If the $VIM environment
   variable is set, the directory will be $VIM\vim80.  Delete the "vim80"
   directory and all that is in it.  Warning: If you changed any of the
   distributed files, or added some of your own files, you might want to save
   these first.  But normally you would not have changed or added files here.

6. Remove setting the $VIM and $VIMRUNTIME environment variable and adjust
   $PATH.  $VIM only needs to be removed if you are not going to install
   another version of Vim.  $VIMRUNTIME is mostly not set.  Check if $PATH
   contains the path of the vim directory.  Note that $PATH may be set in
   several places, you will have to find the right one, and only delete the
   Vim path from it.  You can most likely find the lines that set $PATH, $VIM
   and/or $VIMRUNTIME in C:\autoexec.bat.  Under Windows NT you might need to
   use the "System Properties" editor to change the environment variables, if
   they are not in the C:\autoexec.bat file.  You can start it by selecting
   Start/Settings/Control Panel and then "System".

7. If you added a Vim entry in the start menu, delete it.

8. If you created icons for Vim on the desktop, delete them.

Vim does not use .ini files.  The above should remove all Vim files, except
the ones that you moved elsewhere yourself.
