*vim_w32.txt*   For Vim version 4.2.  Last modification: 1996 June 13

This file documents the idiosyncrasies of the Win32 version of Vim.

The Win32 version was written by George V. Reilly <gvr@halcyon.com>.
The original Windows NT port was done by Roger Knobbe <RogerK@wonderware.com>.

The Win32 version of Vim works on both Windows NT and Windows 95.  It is a
console-mode application (i.e., it runs in a command prompt window or a "DOS
box").  It is not a full-fledged Windows GUI application, although it may
become one some day.  It will not run in the Win32s subsystem in Windows
3.1; use the 32-bit DOS version of Vim instead.  See |vim_dos.txt|.

Vim for Win32 compiles with the Microsoft Visual C++ 2.0 compiler and later,
and with the Borland C++ 4.5 32-bit compiler and later.  It compiles on
Windows 95 and all four NT platforms: i386, Alpha, MIPS, and PowerPC.  The
NT/i386 and the Windows 95 binaries are identical.  Use Makefile.w32 to
compile with Visual C++ and Makefile.b32 to compile with Borland C++.

You can set the colour used in five modes with nine termcap options.  Which of
the five modes is used for which action depends on the |'highlight'| option.

	":set t_mr=^V^[\|xxm"		start of invert mode
	":set t_md=^V^[\|xxm"		start of bold mode
	":set t_me=^V^[\|xxm"		back to normal text

	":set t_so=^V^[\|xxm"		start of standout mode
	":set t_se=^V^[\|xxm"		back to normal text

	":set t_us=^V^[\|xxm"		start of underline mode
	":set t_ue=^V^[\|xxm"		back to normal text

	":set t_ZH=^V^[\|xxm"		start of italics mode
	":set t_ZR=^V^[\|xxm"		back to normal text

^V is CTRL-V
^[ is ESC
xx must be replaced by a decimal code, which is the foreground colour number
   and background colour number added together:

COLOUR		FOREGROUND	BACKGROUND
 black		    0		    0
 blue		    1		   16
 green		    2		   32
 cyan		    3		   48
 red		    4		   64
 magenta	    5		   80
 brown		    6		   96
 lightgray	    7		  112
 darkgray	    8		  128
 lightblue	    9		  144
 lightgreen	   10		  160
 lighcyan	   11		  176
 lightred	   12		  192
 lightmagenta	   13		  208
 yellow		   14		  224
 white		   15		  240

When you use 0, the colour is reset to the one used when you started Vim
(usually 7, lightgray on black, but you can override this in NT.  If you have
overridden the default colours in a command prompt, you may need to adjust
some of the highlight colours in your vimrc---see below).

The defaults for the various highlight modes are:
	t_mr	112		 reverse mode: black text on lightgray
	t_md	 63		 bold mode: white text on cyan
	t_me	  0		 normal mode (revert to default)

	t_so	 31		 standout mode: white text on blue
	t_se	  0		 standout mode end (revert to default)

	t_czh	225		 italic mode: blue text on yellow
	t_czr	  0		 italic mode end (revert to default)

	t_us	 67		 underline mode: cyan text on red
	t_ue	  0		 underline mode end (revert to default)

These colours were chosen because they also look good when using an inverted
display, but you can change them to your liking.

Example:
:set t_mr=^V^[\|97m		" start of invert mode: blue on brown
:set t_md=^V^[\|67m		" start of bold mode: cyan on red
:set t_me=^V^[\|112m		" back to normal mode: black on light gray

:set t_so=^V^[\|37m		" start of standout mode: magenta on green
:set t_se=^V^[\|112m		" back to normal mode: black on light gray

If the "tx" (textmode) option is set (which is the default), Vim will accept
a single <NL> or a <CR><NL> pair for end-of-line.  When writing a file, Vim
will use <CR><NL>.  Thus, if you edit a file and write it, <NL> is replaced
with <CR><NL>.  If the "tx" option is not set, a single <NL> will be used
for end-of-line.  A <CR> will be shown as ^M.  You can use Vim to replace
<NL> with <CR><NL> by reading in any mode and writing in text mode (":se
tx").  You can use Vim to replace <CR><NL> with <NL> by reading in text mode
and writing in non-text mode (":se notx"). 'textmode' is set automatically
when 'textauto' is on (which is the default), so you don't really have to
worry about what you are doing.			|'textmode'| |'textauto'|

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'|

Using backslashes in file names can be a problem.  Vi halves the number of
backslashes for some commands.  Vim is a bit more tolerant and backslashes
are not removed from a file name, so ":e c:\foo\bar" works as expected.  But
when a backslash is used before a special character (space, comma, backslash,
etc.), it is removed.  Use slashes to avoid problems: ":e c:/foo/bar" works
fine.  Vim will replace the slashes with backslashes internally, to avoid
problems with some MS-DOS programs and Win32 programs.

If you want to edit a script file or a binary file, you should reset the
'textmode' and 'textauto' options before loading the file.  Script files and
binary files may contain single <NL> characters which would be replaced with
<CR><NL>.  You can reset 'textmode' and 'textauto' automatically by starting
Vim with the "-b" (binary) option.

You should set the environment variable "VIM" to the directory where the Vim
documentation files are.  If "VIM" is used but not defined, "HOME" is tried
too.

If the HOME environment variable is not set, the value "C:/" is used as a
default.

The default help filename is "$VIM\vim_help.txt".  If the environment variable
$VIM is not defined or the file is not found, the Win32 search path is used to
search for the file "vim_help.txt".  If you do not want to put "vim_help.txt"
in your search path, use the command ":set helpfile=pathname" to tell Vim
where the help file is.					|'helpfile'|

Vim will look for initializations in eight places.  The first that is found
is used and the others are ignored.  The order is:
	-  The environment variable VIMINIT
	-  The file "$VIM/_vimrc"
	-  The file "$HOME/_vimrc"
	-  The file "$VIM/.vimrc"
	-  The file "$HOME/.vimrc"
	-  The environment variable EXINIT
	-  The file "$VIM/_exrc"
	-  The file "$HOME/_exrc"

The only kind of terminal type that the Win32 version of Vim understands is
"win32", which is built-in.  If you set the TERM environment variable to
anything else, you will probably get very strange behaviour from Vim.  This is
most likely to happen when running a non-standard shell such as Cygnus's
GNU-Win32 bash (http://www.cygnus.com/misc/gnu-win32) or the one in the MKS
toolkit.  Use "unset TERM" before starting Vim!

The ":cd" command recognizes the drive specifier and changes the current
drive.  Use ":cd c:" to make drive C the active drive.  Use ":cd d:\foo" to go
to the directory "foo" in the root of drive D.  UNC names are also recognized;
e.g., ":cd \\server\share\dir".				|:cd|

Use CTRL-BREAK instead of CTRL-C to interrupt searches.  The CTRL-C is not
detected until a key is read.

Temporary files (for filtering) are put in the current directory.

The default for the 'sh' ('shell') option is "command.com" on Windows 95 and
"cmd.exe" on Windows NT.  If SHELL is defined, it is used instead, and if
SHELL is not defined but COMSPEC is, COMPSPEC is used.  External commands are
started with "command /c <command_name>".  Typing CTRL-Z starts a new
command subshell.  Return to Vim with "exit".		|'shell'| |CTRL-Z|

The Win32 binary was compiled with Visual C++ version 4.0, using Makefile.w32.
Other compilers should also work.  If you get all kinds of strange error
messages when compiling (you shouldn't with the Microsoft or Borland 32-bit
compilers), try adding <CR> characters at the end of each line.  This can be
done with the addcr program: "nmake -f makefile.w32 addcr".  This will compile
addcr.c to addcr.exe and then execute the addcr.bat file.  Sometimes this
fails.  In that case, execute the addcr.bat file from the DOS prompt.

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.					|mouse_using|

Q. Why does the Win32 version of Vim update the screen so slowly on Windows 95?
A. The support for Win32 console mode applications is very buggy in Win95.
   For some unknown reason, the screen updates very slowly when Vim is run at
   one of the standard resolutions (80x25, 80x43, or 80x50) and the 16-bit DOS
   version updates the screen much more quickly than the Win32 version.
   However, if the screen is set to some other resolution, such as by ":set
   columns=100" or ":set lines=40", screen updating becomes about as fast as
   it is with the 16-bit version.

   WARNING: Changing 'columns' may make Windows 95 crash while updating the
   window (complaints --> Microsoft).  Since this mostly works, this has not
   been disabled, but be careful with changing 'columns'.

   Changing the screen resolution makes updates faster, but it brings problems
   with it of its own.  External commands (e.g., ":!dir") can cause Vim to
   freeze when the screen is set to a non-standard resolution, particularly
   when 'columns' is not equal to 80.  It is not possible for Vim to reliably
   set the screen resolution back to the value it had upon startup before
   running external commands, so if you change the number of 'lines' or
   'columns', be very, very careful.  In fact, Vim will not allow you to
   execute external commands when 'columns' is not equal to 80, because it is
   so likely to freeze up afterwards.

   None of the above applies on Windows NT.  Screen updates are fast, no
   matter how many 'lines' or 'columns' the window is set to, and external
   commands will not cause Vim to freeze.

Q. So if the Win32 version updates the screen so slowly on Windows 95 and the
   16-bit DOS version updates the screen quickly, why would I want to run the
   Win32 version?
A. Firstly, the Win32 version isn't that slow, especially when the screen is
   set to some non-standard number of 'lines' or 'columns'.  Secondly, the
   16-bit DOS version has some severe limitations: it can't edit big files and
   it doesn't know about long filenames.  The Win32 version doesn't have these
   limitations and it's faster overall (the same is true for the 32-bit DJGPP
   DOS version of Vim).  The Win32 version is smarter about handling the
   screen, the mouse, and the keyboard than the DJGPP version is.

Q. And what about the 16-bit DOS version versus the Win32 version on NT?
A. There are no good reasons to run the 16-bit DOS version on NT.  The Win32
   version updates the screen just as fast as the 16-bit version does when
   running on NT.  All of the above disadvantages apply.  Finally, DOS
   applications can take a long time to start up and will run more slowly.  On
   non-Intel NT platforms, the DOS version is almost unusably slow, because it
   runs on top of an 80x86 emulator.

Q. Why can't I paste into Vim when running Windows 95?
A. In the properties dialog box for the MS-DOS window, go to "MS-DOS
   Prompt/Misc/Fast pasting" and make sure that it is NOT checked.  You should
   also do ":set paste" in Vim to avoid unexpected effects.	|'paste'|

Q. How do I type dead keys on Windows 95?
   (A dead key is an accent key, such as acute, grave, or umlaut, that doesn't
   produce a character by itself, but when followed by another key, produces
   an accented character, such as a-acute, e-grave, u-umlaut, n-tilde, and so
   on.  Very useful for most European languages.  English-language keyboard
   layouts don't use dead keys, as far as we know.)
A. You don't.  The console mode input routines simply do not work correctly in
   Windows 95, and I have not been able to work around them.  In the words
   of a senior developer at Microsoft:
	Win95 console support has always been and will always be flaky.

	The flakiness is unavoidable because we are stuck between the world of
	MS-DOS keyboard TSRs like KEYB (which wants to cook the data;
	important for international) and the world of Win32.

	So keys that don't "exist" in MS-DOS land (like dead keys) have a
	very tenuous existence in Win32 console land.  Keys that act
	differently between MS-DOS land and Win32 console land (like
	capslock) will act flaky.

	Don't even _mention_ the problems with multiple language keyboard
 	layouts...

   You may be able to fashion some sort of workaround with the digraphs
   mechanism.							|digraphs|

   Alternatively, you can try one of the DOS versions of Vim where dead keys
   reportedly do work.

Q. How do I type dead keys on Windows NT?
A. Dead keys work on NT.  Just type them as you would in any other application.

Q. When will a real GUI version of Vim (gvim) for Win32 with scrollbars,
   menus, pasting from the clipboard, and so on become available?
A. A few months after Vim 4.0 is released.  Apart from the features you
   might expect in gvim (see |vim_gui.txt|), it is expected that a real GUI
   version will also be able to handle dead keys correctly and that the
   problems with external commands will be a thing of the past.

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'|


 vim:ts=8:sw=8:js:tw=78:fo=tcq2:
