| *os_win32.txt* For Vim version 7.2. Last change: 2008 May 02 |
| |
| |
| 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 both Windows NT and Windows 95. There are |
| both console and GUI versions. There is GUI version for use in the Win32s |
| subsystem in Windows 3.1[1]. You can also use the 32-bit DOS version of Vim |
| instead. See |os_msdos.txt|. |
| |
| 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 3.1 |win32-win3.1| |
| 6. 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/INSTALL.pc". *win32-compiling* |
| |
| ============================================================================== |
| 1. Known problems *windows95* *win32-problems* |
| |
| There are a few known problems with running in a console on Windows 95. As |
| far as we know, this is the same in Windows 98 and Windows ME. |
| |
| Comments from somebody working at Microsoft: "Win95 console support has always |
| been and will always be flaky". |
| 1. Dead key support doesn't work. |
| 2. Resizing the window with ":set columns=nn lines=nn" works, but executing |
| external commands MAY CAUSE THE SYSTEM TO HANG OR CRASH. |
| 3. Screen updating is slow, unless you change 'columns' or 'lines' to a |
| non-DOS value. But then the second problem applies! |
| |
| If this bothers you, use the 32 bit MS-DOS version or the Win32 GUI version. |
| |
| 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. |
| |
| ============================================================================== |
| 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 3.1 *win32-win3.1* |
| |
| *win32s* *windows-3.1* |
| There is a special version of Gvim that runs under Windows 3.1 and 3.11. You |
| need the gvim.exe that was compiled with Visual C++ 4.1. |
| |
| To run the Win32 version under Windows 3.1, you need to install Win32s. You |
| might have it already from another Win32 application which you have installed. |
| If Vim doesn't seem to be running properly, get the latest version: 1.30c. |
| You can find it at: |
| |
| http://support.microsoft.com/download/support/mslfiles/pw1118.exe |
| |
| (Microsoft moved it again, we don't know where it is now :-( ). |
| |
| The reason for having two versions of gvim.exe is that the Win32s version was |
| compiled with VC++ 4.1. This is the last version of VC++ that supports Win32s |
| programs. VC++ 5.0 is better, so that one was used for the Win32 version. |
| Apart from that, there is no difference between the programs. If you are in a |
| mixed environment, you can use the gvim.exe for Win32s on both. |
| |
| The Win32s version works the same way as the Win32 version under 95/NT. When |
| running under Win32s the following differences apply: |
| - You cannot use long file names, because Windows 3.1 doesn't support them! |
| - When executing an external command, it doesn't return an exit code. After |
| doing ":make" you have to do ":cn" yourself. |
| |
| ============================================================================== |
| 6. Win32 mini FAQ *win32-faq* |
| |
| 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 |
| additional problems. 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 has, and external commands |
| do 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 do big changes and |
| it doesn't know about long file names. 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. 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. When I change the size of the console window with ':set lines=xx' or |
| similar, the font changes! (Win95) |
| A. You have the console font set to 'Auto' in Vim's (or your MS-DOS prompt's) |
| properties. This makes W95 guess (badly!) what font is best. Set an explicit |
| font instead. |
| |
| 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, in the console version? |
| (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| |
| |
| The best solution is to use the Win32 GUI version gvim.exe. 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 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". |
| |
| Q. I'm using Win32s, and when I try to run an external command like "make", |
| Vim doesn't wait for it to finish! Help! |
| A. The problem is that a 32-bit application (Vim) can't get notification from |
| Windows that a 16-bit application (your DOS session) has finished. Vim |
| includes a work-around for this, but you must set up your DOS commands to |
| run in a window, not full-screen. Unfortunately the default when you |
| install Windows is full-screen. To change this: |
| 1) Start PIF editor (in the Main program group). |
| 2) Open the file "_DEFAULT.PIF" in your Windows directory. |
| 3) Changes the display option from "Full Screen" to "Windowed". |
| 4) Save and exit. |
| |
| To test, start Vim and type > |
| :!dir C:\<CR>". |
| < You should see a DOS box window appear briefly with the directory listing. |
| |
| Q. I use Vim under Win32s and NT. In NT, I can define the console to default to |
| 50 lines, so that I get a 80x50 shell when I ':sh'. Can I do the same in |
| W3.1x, or am I stuck with 80x25? |
| A. Edit SYSTEM.INI and add 'ScreenLines=50' to the [NonWindowsApp] section. DOS |
| prompts and external DOS commands will now run in a 50-line window. |
| |
| vim:tw=78:fo=tcq2:ts=8:ft=help:norl: |