*os_win32.txt*  For Vim version 8.0.  Last change: 2016 Oct 12


		  VIM REFERENCE MANUAL    by George Reilly


						*win32* *Win32* *MS-Windows*
This file documents the idiosyncrasies of the Win32 version of Vim.

The Win32 version of Vim works on Windows XP, Vista, 7, 8 and 10.  There are
both console and GUI versions.

The 32 bit version also runs on 64 bit MS-Windows systems.

1. Known problems		|win32-problems|
2. Startup			|win32-startup|
3. Restore screen contents	|win32-restore|
4. Using the mouse		|win32-mouse|
5. Running under Windows 95	|win32-win95|
6. Running under Windows 3.1	|win32-win3.1|
7. Win32 mini FAQ		|win32-faq|

Additionally, there are a number of common Win32 and DOS items:
File locations			|dos-locations|
Using backslashes		|dos-backslash|
Standard mappings		|dos-standard-mappings|
Screen output and colors	|dos-colors|
File formats			|dos-file-formats|
:cd command			|dos-:cd|
Interrupting			|dos-CTRL-Break|
Temp files			|dos-temp-files|
Shell option default		|dos-shell|

Win32 GUI			|gui-w32|

Credits:
The Win32 version was written by George V. Reilly <george@reilly.org>.
The original Windows NT port was done by Roger Knobbe <RogerK@wonderware.com>.
The GUI version was made by George V. Reilly and Robert Webb.

For compiling see "src/INSTALLpc.txt".			*win32-compiling*

==============================================================================
1. Known problems					*win32-problems*

When doing file name completion, Vim also finds matches for the short file
name.  But Vim will still find and use the corresponding long file name.  For
example, if you have the long file name "this_is_a_test" with the short file
name "this_i~1", the command ":e *1" will start editing "this_is_a_test".

==============================================================================
2. Startup						*win32-startup*

Current directory					*win32-curdir*

If Vim is started with a single file name argument, and it has a full path
(starts with "x:\"), Vim assumes it was started from the file explorer and
will set the current directory to where that file is.  To avoid this when
typing a command to start Vim, use a forward slash instead of a backslash.
Example: >

	vim c:\text\files\foo.txt

Will change to the "C:\text\files" directory. >

	vim c:/text\files\foo.txt

Will use the current directory.


Term option						*win32-term*

The only kind of terminal type that the Win32 version of Vim understands is
"win32", which is built-in.  If you set 'term' to anything else, you will
probably get very strange behavior from Vim.  Therefore Vim does not obtain
the default value of 'term' from the environment variable "TERM".

$PATH							*win32-PATH*

The directory of the Vim executable is appended to $PATH.  This is mostly to
make "!xxd" work, as it is in the Tools menu.  And it also means that when
executable() returns 1 the executable can actually be executed.

Quotes in file names					*win32-quotes*

Quotes inside a file name (or any other command line argument) can be escaped
with a backslash.  E.g. >
	vim -c "echo 'foo\"bar'"

Alternatively use three quotes to get one: >
	vim -c "echo 'foo"""bar'"

The quotation rules are:

1. A `"` starts quotation.
2. Another `"` or `""` ends quotation. If the quotation ends with `""`, a `"`
   is produced at the end of the quoted string.

Examples, with [] around an argument:
        "foo"           -> [foo]
        "foo""          -> [foo"]
        "foo"bar        -> [foobar]
        "foo" bar       -> [foo], [bar]
        "foo""bar       -> [foo"bar]
        "foo"" bar      -> [foo"], [bar]
        "foo"""bar"     -> [foo"bar]


==============================================================================
3. Restore screen contents				*win32-restore*

When 'restorescreen' is set (which is the default), Vim will restore the
original contents of the console when exiting or when executing external
commands.  If you don't want this, use ":set nors".	|'restorescreen'|

==============================================================================
4. Using the mouse					*win32-mouse*

The Win32 version of Vim supports using the mouse.  If you have a two-button
mouse, the middle button can be emulated by pressing both left and right
buttons simultaneously - but note that in the Win32 GUI, if you have the right
mouse button pop-up menu enabled (see 'mouse'), you should err on the side of
pressing the left button first.				|mouse-using|

When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of
the console.

==============================================================================
5. Running under Windows 95				*win32-win95*
					*windows95* *windows98* *windowsme*
Windows 95/98/ME support was removed in patch 8.0.0029  If you want to use it
you will need to get a version older than that.

==============================================================================
6. Running under Windows 3.1				*win32-win3.1*

					*win32s* *windows-3.1* *gui-w32s*
There was a special version of Gvim that runs under Windows 3.1 and 3.11.
Support was removed in patch 7.4.1363.

==============================================================================
7. Win32 mini FAQ					*win32-faq*

Q. How do I change the font?
A. In the GUI version, you can use the 'guifont' option.  Example: >
	:set guifont=Lucida_Console:h15:cDEFAULT
<  In the console version, you need to set the font of the console itself.
   You cannot do this from within Vim.

Q. How do I type dead keys on Windows NT?
A. Dead keys work on NT 3.51.  Just type them as you would in any other
   application.
   On NT 4.0, you need to make sure that the default locale (set in the
   Keyboard part of the Control Panel) is the same as the currently active
   locale.  Otherwise the NT code will get confused and crash!  This is a NT
   4.0 problem, not really a Vim problem.

Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server.
   When I write the file, Vim does not "write through" the symlink.  Instead,
   it deletes the symbolic link and creates a new file in its place.  Why?
A. On Unix, Vim is prepared for links (symbolic or hard).  A backup copy of
   the original file is made and then the original file is overwritten.  This
   assures that all properties of the file remain the same.  On non-Unix
   systems, the original file is renamed and a new file is written.  Only the
   protection bits are set like the original file.  However, this doesn't work
   properly when working on an NFS-mounted file system where links and other
   things exist.  The only way to fix this in the current version is not
   making a backup file, by ":set nobackup nowritebackup"     |'writebackup'|

Q. I'm using Vim to edit a file on a Unix file server through Samba.  When I
   write the file, the owner of the file is changed.  Why?
A. When writing a file Vim renames the original file, this is a backup (in
   case writing the file fails halfway).  Then the file is written as a new
   file.  Samba then gives it the default owner for the file system, which may
   differ from the original owner.
   To avoid this set the 'backupcopy' option to "yes".  Vim will then make a
   copy of the file for the backup, and overwrite the original file.  The
   owner isn't changed then.

Q. How do I get to see the output of ":make" while it's running?
A. Basically what you need is to put a tee program that will copy its input
   (the output from make) to both stdout and to the errorfile.  You can find a
   copy of tee (and a number of other GNU tools) at
   http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net
   Alternatively, try the more recent Cygnus version of the GNU tools at
   http://www.cygwin.com  Other Unix-style tools for Win32 are listed at
   http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
   When you do get a copy of tee, you'll need to add >
	:set shellpipe=\|\ tee
<  to your _vimrc.

Q. I'm storing files on a remote machine that works with VisionFS, and files
   disappear!
A. VisionFS can't handle certain dot (.) three letter extension file names.
   SCO declares this behavior required for backwards compatibility with 16bit
   DOS/Windows environments.  The two commands below demonstrate the behavior:
>
	echo Hello > file.bat~ 
	dir > file.bat
<
   The result is that the "dir" command updates the "file.bat~" file, instead
   of creating a new "file.bat" file.  This same behavior is exhibited in Vim
   when editing an existing file named "foo.bat" because the default behavior
   of Vim is to create a temporary file with a '~' character appended to the
   name.  When the file is written, it winds up being deleted.

   Solution: Add this command to your _vimrc file: >
	:set backupext=.temporary

Q. How do I change the blink rate of the cursor?
A. You can't!  This is a limitation of the NT console.  NT 5.0 is reported to
   be able to set the blink rate for all console windows at the same time.

							*:!start*
Q. How can I run an external command or program asynchronously?
A. When using :! to run an external command, you can run it with "start": >
	:!start winfile.exe<CR>
<  Using "start" stops Vim switching to another screen, opening a new console,
   or waiting for the program to complete; it indicates that you are running a
   program that does not affect the files you are editing.  Programs begun
   with :!start do not get passed Vim's open file handles, which means they do
   not have to be closed before Vim.
   To avoid this special treatment, use ":! start".
   There are two optional arguments (see the next Q):
       /min  the window will be minimized
       /b    no console window will be opened
   You can use only one of these flags at a time.  A second one will be
   treated as the start of the command.

Q. How do I avoid getting a window for programs that I run asynchronously?
A. You have two possible solutions depending on what you want:
   1) You may use the /min flag in order to run program in a minimized state
      with no other changes. It will work equally for console and GUI
      applications.
   2) You can use the /b flag to run console applications without creating a
      console window for them (GUI applications are not affected). But you
      should use this flag only if the application you run doesn't require any
      input.  Otherwise it will get an EOF error because its input stream
      (stdin) would be redirected to \\.\NUL (stdout and stderr too).

   Example for a console application, run Exuberant ctags: >
        :!start /min ctags -R .
<  When it has finished you should see file named "tags" in your current
   directory.  You should notice the window title blinking on your taskbar.
   This is more noticeable for commands that take longer.
   Now delete the "tags" file and run this command: >
        :!start /b ctags -R .
<  You should have the same "tags" file, but this time there will be no
   blinking on the taskbar.
   Example for a GUI application: >
        :!start /min notepad
        :!start /b notepad
<  The first command runs notepad minimized and the second one runs it
   normally.

						*windows-icon*
Q. I don't like the Vim icon, can I change it?
A. Yes, place your favorite icon in bitmaps/vim.ico in a directory of
   'runtimepath'.  For example ~/vimfiles/bitmaps/vim.ico.


 vim:tw=78:fo=tcq2:ts=8:ft=help:norl:
