*os_msdos.txt*  For Vim version 7.0e.  Last change: 2005 Mar 29


		  VIM REFERENCE MANUAL    by Bram Moolenaar


					*msdos* *ms-dos* *MSDOS* *MS-DOS*
This file contains the particularities for the MS-DOS version of Vim.

1. Two versions for MS-DOS	|msdos-versions|
2. Known problems		|msdos-problems|
3. Long file names		|msdos-longfname|
4. Termcap codes		|msdos-termcap|
5. Shifted arrow keys		|msdos-arrows|
6. Filename extensions		|msdos-fname-extensions|
7. Memory usage and limitations	|msdos-limitations|
8. Symbolically linked files	|msdos-linked-files|
9. Copy/paste in a dos box	|msdos-copy-paste|

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|

For compiling Vim see src/INSTALL.pc.			*msdos-compiling*

==============================================================================
1. Two versions for MS-DOS				*msdos-versions*

There are two versions of Vim that can be used with MS-DOS machines:

							*dos16*
Dos16 version	Can be used on any MS-DOS system, only uses up to 640 Kbyte of
		memory.  Also runs on OS/2, Windows 95, and NT.  Excludes some
		Vim-specific features (autocommands, syntax highlighting,
		etc.).  Recommended for use on pre-386 machines.
							*dos32*
Dos32 version	Requires 386 processor and a |DPMI| driver, uses all
		available memory.  Supports long file names and the Windows
		clipboard, but NOT on Windows NT.  Recommended for MS-DOS,
		Windows 3.1 and Windows 95.

There are also two versions that run under Windows:
Win32 version   Requires Windows 95 or Windows NT, uses all available
		memory, supports long file names, etc.  Has some problems on
		Windows 95.  Recommended for Windows NT.  See |os_win32.txt|
Win32 GUI	Requirements like the Win32 version, but runs in its own
		window, instead of a console.  Has scrollbars, menu, etc.
		Recommended for Windows 95 and Windows NT.  See |gui-w32|.

It is recommended to use the Dos32 or Win32 version.  Although the Dos16
version is able to edit very big files, it quickly runs out of memory when
making big changes.  Disabling undo helps: ":set ul=-1".  The screen updating
of the Dos16 version is the fastest of the three on DOS or Windows 95; on
Windows NT, the Win32 version is just as fast.

								*DPMI*
For the Dos32 version, you may need a DPMI driver when running in MS-DOS.  If
you are running Windows or installed a clever memory manager, it will probably
work already.  If you get the message "No DPMI", you need to install a DPMI
driver.  Such a driver is included with the executable in CSDPMI4B.ZIP.  Run
"cwsdpmi" just before starting Vim each time.  Or you might want to include
"cwsdpmi -p" in your autoexec.bat to make it resident.  The latest version of
"CSDPMI*.ZIP" can be obtained from: "ftp.neosoft.com:pub/users/s/sandmann".

							*minimal-features*
The 16 bit DOS version has been compiled with minimal features.  Check the
|+feature-list| which ones are included (marked with a "T").
You can include more features by editing feature.h and recompiling.

==============================================================================
2. Known problems					*msdos-problems*

When using smartdrive (MS-DOS 6.x) with write-behind caching, it is possible
that Vim will try to create a swap file on a read-only file system (e.g.
write protected floppy).  You will then be given the message >
	A serious disk error has occurred .., Retry (r)?
There is nothing you can do but unprotect the floppy or switch off the
computer.  Even CTRL-ALT-DEL will not get you out of this.  This is really a
problem of smartdrive, not Vim.  Smartdrive works fine otherwise.  If this
bothers you, don't use the write-behind caching.

Vim can't read swap files that have been opened already, unless the "share"
command has been used.  If you see stray warnings for existing swap files,
include the "share" command in your config.sys or autoexec.bat (see your MSDOS
documentation).

The Dos16 version can only have about 10 files open (in a window or hidden) at
one time.  With more files you will get error messages when trying to read or
write a file, and for filter commands.  Or Vim runs out of memory, and random
problems may result.

The Dos32 version cannot have an unlimited number of files open at any one
time.  The limit depends on the setting of FILES in your CONFIG.SYS.  This
defaults to 15; if you need to edit a lot of files, you should increase this.
If you do not set FILES high enough, you can get strange errors, and shell
commands may cause a crash!

The Dos32 version can work with long file names.  When doing file name
completion, matches for the short file name will also be found.  But this will
result in 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".

When using the Dos32 version and you run into problems with DPMI support,
check if there is a program in your config.sys that eats resources.  One
program known to cause this problem is "netx", which says "NetWare v. 3.26
Workstation shell".  Replace it with version 3.32 to fix the problem.

The Dos32 version will parse its arguments to handle quotation.  This is good
to edit a file with spaces in its name, for example: >
	vim "program files\accessories\ppp.scp"
A side effect is that single quotes are removed.  Insert a backslash to avoid
that.  For example, to edit the file "fi'le.txt": >
	vim fi\'le.txt

==============================================================================
3. Long file names					*msdos-longfname*

If the Dos32 version is run on Windows 95, it can use long file names.  It
will work by default.  If you want to disable this, use this setting:
	set LFN=N
You can put this in your autoexec.bat file.

Note: If you have installed DJGPP on your machine, you probably have a
"djgpp.env" file, which contains "LFN=n".  You need to use "LFN=Y" to switch
on using long file names then.

==============================================================================
4. Termcap codes					*msdos-termcap*

If you want to use another output method (e.g., when using a terminal on a COM
port), set the terminal name to "pcansi".  You can change the termcap options
when needed (see |terminal-options|).  Note that the
normal IBM ansi.sys does not support all the codes of the builtin pcansi
terminal.  If you use ansi.sys, you will need to delete the termcap entries
t_al and t_dl with >
   :set t_al= t_dl=
Otherwise, the screen will not be updated correctly.  It is better to use
nansi.sys, nnansi.sys, or the like instead of ansi.sys.

If you want to use Vim on a terminal connected to a COM: port, reset the
'bioskey' option.  Otherwise the commands will be read from the PC keyboard.
CTRL-C and CTRL-P may not work correctly with 'bioskey' reset.

==============================================================================
5. Shifted arrow keys					*msdos-arrows*

Use CTRL-arrow-left and CTRL-arrow-right instead of SHIFT-arrow-left and
SHIFT-arrow-right.  The arrow-up and arrow-down cannot be used with SHIFT or
CTRL.

==============================================================================
6. Filename extensions				*msdos-fname-extensions*

MS-DOS allows for only one file name extension.  Therefore, when appending an
extension, the '.' in the original file name is replaced with a '_', the name
is truncated to 8 characters, and the new extension (e.g., ".swp") is
appended.  Two examples: "test.c" becomes "test_c.bak", "thisisat.est"
becomes "thisisat.bak".  To reduce these problems, the default for
'backupext' is "~" instead of ".bak".  The backup file for "thisisat.est"
then becomes "thisisat.es~".  The 'shortname' option is not available,
because it would always be set.

==============================================================================
7. Memory usage and limitations			*msdos-limitations*

A swap file is used to store most of the text.  You should be able to edit
very large files.  However, memory is used for undo and other things.  If you
delete a lot of text, you can still run out of memory in the Dos16 version.

If Vim gives an "Out of memory" warning, you should stop editing.  The result
of further editing actions is unpredictable.  Setting 'undolevels' to 0 saves
some memory.  Running the maze macros on a big maze is guaranteed to run out
of memory, because each change is remembered for undo.  In this case set
'undolevels' to a negative number.  This will switch off undo completely.

						*msdos-clipboard-limits*
In the Dos32 version, extended memory is used to avoid these problems.
However, if you are using the clipboard, you can still run into memory
limitations because the Windows clipboard can only communicate with Vim using
Dos memory.  This means that the largest amount of text that can be sent to
or received from the Windows clipboard is limited by how much free Dos memory
is available on your system.

You can usually maximize the amount of available Dos memory by adding the
following lines to Dos's "config.sys" file: >

	DOS=HIGH,UMB
	DEVICE=C:\WINDOWS\himem.sys
	DEVICE=C:\WINDOWS\emm386.exe RAM

Modifying config.sys in this way will also help to make more memory available
for the Dos16 version, if you are using that.

In the Dos16 version the line length is limited to about 32000 characters.
When reading a file the lines are automatically split.  But editing a line
in such a way that it becomes too long may give unexpected results.

==============================================================================
8. Symbolically linked files			*msdos-linked-files*

When using Vim to edit a symbolically linked file on a unix NFS file server,
you may run into problems.  When writing the file, Vim does not "write
through" the symlink.  Instead, it deletes the symbolic link and creates a new
file in its place.

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

A similar problem occurs when mounting a Unix filesystem through Samba or a
similar system.  When Vim creates a new file it will get the default user ID
for the mounted file system.  This may be different from the original user ID.
To avoid this set the 'backupcopy' option to "yes".

==============================================================================
9. Copy/paste in a dos box			*msdos-copy-paste*

					*E450* *E451* *E452* *E453* *E454*
The 32 bit version can copy/paste from/to the Windows clipboard directly.  Use
the "* register.  Large amounts of text can be copied this way, but it must be
possible to allocate memory for it, see |msdos-clipboard-limits|.  When moving
text from one Vim to another, the type of the selection
(characterwise/linewise/blockwise) is passed on.

In other versions, the following can be used.

(posted to comp.editors by John Velman <velman@igate1.hac.com>)

How to copy/paste text from/to vim in a dos box:

1) To get VIM to run in a window, instead of full screen, press alt+enter.
   This toggles back and forth between full screen and a dos window.
   NOTE: In Windows 95 you must have the property "Fast Pasting" unchecked!
   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.
   To make this permanent, change the properties for
   "\windows\system\conagent.exe" (from Philip Nelson, unverified).

2) To paste something _into_ Vim, put Vim in insert mode.

3) Put the text you want to paste on the windows clipboard.

4) Click the control box in the upper left of the Vim window.  (This looks
   like a big minus sign.)  If you don't want to use the mouse, you can get
   this with alt+spacebar.
5) On the resulting dropdown menu choose "Edit".
6) On the child dropdown menu choose "Paste".

To copy something from the Vim window to the clipboard,

1) Select the control box to get the control drop down menu.
2) Select "Edit".
3) Select "Mark".
4) Using either the keys or the mouse, select the part of the Vim window that
   you want to copy.  To use the keys, use the arrow keys, and hold down shift
   to extend the selection.
5) When you've completed your selection, press 'enter'.  The selection
   is now in the windows clipboard.  By the way, this can be any
   rectangular selection, for example columns 4-25 in rows 7-10.  It can
   include anything in the VIM window: the output of a :!dir, for
   example.

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