Bram Moolenaar | 2a8a3ec | 2011-01-08 16:06:37 +0100 | [diff] [blame] | 1 | *os_win32.txt* For Vim version 7.3. Last change: 2010 Dec 19 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 2 | |
| 3 | |
| 4 | VIM REFERENCE MANUAL by George Reilly |
| 5 | |
| 6 | |
| 7 | *win32* *Win32* *MS-Windows* |
| 8 | This file documents the idiosyncrasies of the Win32 version of Vim. |
| 9 | |
Bram Moolenaar | c095b28 | 2010-07-20 22:33:34 +0200 | [diff] [blame] | 10 | The Win32 version of Vim works on Windows NT, 95, 98, ME, XP, Vista and |
| 11 | Windows 7. There are both console and GUI versions. |
| 12 | |
| 13 | The 32 bit version also runs on 64 bit MS-Windows systems. |
| 14 | |
| 15 | There is GUI version for use in the Win32s subsystem in Windows 3.1[1]. You |
| 16 | can also use the 32-bit DOS version of Vim instead. See |os_msdos.txt|. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 17 | |
| 18 | 1. Known problems |win32-problems| |
| 19 | 2. Startup |win32-startup| |
| 20 | 3. Restore screen contents |win32-restore| |
| 21 | 4. Using the mouse |win32-mouse| |
| 22 | 5. Running under Windows 3.1 |win32-win3.1| |
| 23 | 6. Win32 mini FAQ |win32-faq| |
| 24 | |
| 25 | Additionally, there are a number of common Win32 and DOS items: |
| 26 | File locations |dos-locations| |
| 27 | Using backslashes |dos-backslash| |
| 28 | Standard mappings |dos-standard-mappings| |
| 29 | Screen output and colors |dos-colors| |
| 30 | File formats |dos-file-formats| |
| 31 | :cd command |dos-:cd| |
| 32 | Interrupting |dos-CTRL-Break| |
| 33 | Temp files |dos-temp-files| |
| 34 | Shell option default |dos-shell| |
| 35 | |
| 36 | Win32 GUI |gui-w32| |
| 37 | |
| 38 | Credits: |
| 39 | The Win32 version was written by George V. Reilly <george@reilly.org>. |
| 40 | The original Windows NT port was done by Roger Knobbe <RogerK@wonderware.com>. |
| 41 | The GUI version was made by George V. Reilly and Robert Webb. |
| 42 | |
Bram Moolenaar | 442b422 | 2010-05-24 21:34:22 +0200 | [diff] [blame] | 43 | For compiling see "src/INSTALLpc.txt". *win32-compiling* |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 44 | |
| 45 | ============================================================================== |
| 46 | 1. Known problems *windows95* *win32-problems* |
| 47 | |
| 48 | There are a few known problems with running in a console on Windows 95. As |
| 49 | far as we know, this is the same in Windows 98 and Windows ME. |
| 50 | |
| 51 | Comments from somebody working at Microsoft: "Win95 console support has always |
| 52 | been and will always be flaky". |
| 53 | 1. Dead key support doesn't work. |
| 54 | 2. Resizing the window with ":set columns=nn lines=nn" works, but executing |
| 55 | external commands MAY CAUSE THE SYSTEM TO HANG OR CRASH. |
| 56 | 3. Screen updating is slow, unless you change 'columns' or 'lines' to a |
| 57 | non-DOS value. But then the second problem applies! |
| 58 | |
| 59 | If this bothers you, use the 32 bit MS-DOS version or the Win32 GUI version. |
| 60 | |
| 61 | When doing file name completion, Vim also finds matches for the short file |
| 62 | name. But Vim will still find and use the corresponding long file name. For |
| 63 | example, if you have the long file name "this_is_a_test" with the short file |
| 64 | name "this_i~1", the command ":e *1" will start editing "this_is_a_test". |
| 65 | |
| 66 | ============================================================================== |
| 67 | 2. Startup *win32-startup* |
| 68 | |
| 69 | Current directory *win32-curdir* |
| 70 | |
| 71 | If Vim is started with a single file name argument, and it has a full path |
| 72 | (starts with "x:\"), Vim assumes it was started from the file explorer and |
| 73 | will set the current directory to where that file is. To avoid this when |
| 74 | typing a command to start Vim, use a forward slash instead of a backslash. |
| 75 | Example: > |
| 76 | |
| 77 | vim c:\text\files\foo.txt |
| 78 | |
| 79 | Will change to the "C:\text\files" directory. > |
| 80 | |
| 81 | vim c:/text\files\foo.txt |
| 82 | |
| 83 | Will use the current directory. |
| 84 | |
| 85 | |
| 86 | Term option *win32-term* |
| 87 | |
| 88 | The only kind of terminal type that the Win32 version of Vim understands is |
| 89 | "win32", which is built-in. If you set 'term' to anything else, you will |
| 90 | probably get very strange behavior from Vim. Therefore Vim does not obtain |
| 91 | the default value of 'term' from the environment variable "TERM". |
| 92 | |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 93 | $PATH *win32-PATH* |
| 94 | |
| 95 | The directory of the Vim executable is appended to $PATH. This is mostly to |
| 96 | make "!xxd' work, as it is in the Tools menu. And it also means that when |
| 97 | executable() returns 1 the executable can actually be executed. |
| 98 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 99 | ============================================================================== |
| 100 | 3. Restore screen contents *win32-restore* |
| 101 | |
| 102 | When 'restorescreen' is set (which is the default), Vim will restore the |
| 103 | original contents of the console when exiting or when executing external |
| 104 | commands. If you don't want this, use ":set nors". |'restorescreen'| |
| 105 | |
| 106 | ============================================================================== |
| 107 | 4. Using the mouse *win32-mouse* |
| 108 | |
| 109 | The Win32 version of Vim supports using the mouse. If you have a two-button |
| 110 | mouse, the middle button can be emulated by pressing both left and right |
| 111 | buttons simultaneously - but note that in the Win32 GUI, if you have the right |
| 112 | mouse button pop-up menu enabled (see 'mouse'), you should err on the side of |
| 113 | pressing the left button first. |mouse-using| |
| 114 | |
| 115 | When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of |
| 116 | the console. |
| 117 | |
| 118 | ============================================================================== |
| 119 | 5. Running under Windows 3.1 *win32-win3.1* |
| 120 | |
| 121 | *win32s* *windows-3.1* |
| 122 | There is a special version of Gvim that runs under Windows 3.1 and 3.11. You |
| 123 | need the gvim.exe that was compiled with Visual C++ 4.1. |
| 124 | |
| 125 | To run the Win32 version under Windows 3.1, you need to install Win32s. You |
| 126 | might have it already from another Win32 application which you have installed. |
| 127 | If Vim doesn't seem to be running properly, get the latest version: 1.30c. |
| 128 | You can find it at: |
| 129 | |
| 130 | http://support.microsoft.com/download/support/mslfiles/pw1118.exe |
| 131 | |
| 132 | (Microsoft moved it again, we don't know where it is now :-( ). |
| 133 | |
| 134 | The reason for having two versions of gvim.exe is that the Win32s version was |
| 135 | compiled with VC++ 4.1. This is the last version of VC++ that supports Win32s |
| 136 | programs. VC++ 5.0 is better, so that one was used for the Win32 version. |
| 137 | Apart from that, there is no difference between the programs. If you are in a |
| 138 | mixed environment, you can use the gvim.exe for Win32s on both. |
| 139 | |
| 140 | The Win32s version works the same way as the Win32 version under 95/NT. When |
| 141 | running under Win32s the following differences apply: |
| 142 | - You cannot use long file names, because Windows 3.1 doesn't support them! |
| 143 | - When executing an external command, it doesn't return an exit code. After |
| 144 | doing ":make" you have to do ":cn" yourself. |
| 145 | |
| 146 | ============================================================================== |
| 147 | 6. Win32 mini FAQ *win32-faq* |
| 148 | |
| 149 | Q. Why does the Win32 version of Vim update the screen so slowly on Windows 95? |
| 150 | A. The support for Win32 console mode applications is very buggy in Win95. |
| 151 | For some unknown reason, the screen updates very slowly when Vim is run at |
| 152 | one of the standard resolutions (80x25, 80x43, or 80x50) and the 16-bit DOS |
| 153 | version updates the screen much more quickly than the Win32 version. |
| 154 | However, if the screen is set to some other resolution, such as by ":set |
| 155 | columns=100" or ":set lines=40", screen updating becomes about as fast as |
| 156 | it is with the 16-bit version. |
| 157 | |
| 158 | WARNING: Changing 'columns' may make Windows 95 crash while updating the |
| 159 | window (complaints --> Microsoft). Since this mostly works, this has not |
| 160 | been disabled, but be careful with changing 'columns'. |
| 161 | |
| 162 | Changing the screen resolution makes updates faster, but it brings |
| 163 | additional problems. External commands (e.g., ":!dir") can cause Vim to |
| 164 | freeze when the screen is set to a non-standard resolution, particularly |
| 165 | when 'columns' is not equal to 80. It is not possible for Vim to reliably |
| 166 | set the screen resolution back to the value it had upon startup before |
| 167 | running external commands, so if you change the number of 'lines' or |
| 168 | 'columns', be very, very careful. In fact, Vim will not allow you to |
| 169 | execute external commands when 'columns' is not equal to 80, because it is |
| 170 | so likely to freeze up afterwards. |
| 171 | |
| 172 | None of the above applies on Windows NT. Screen updates are fast, no |
| 173 | matter how many 'lines' or 'columns' the window has, and external commands |
| 174 | do not cause Vim to freeze. |
| 175 | |
| 176 | Q. So if the Win32 version updates the screen so slowly on Windows 95 and the |
| 177 | 16-bit DOS version updates the screen quickly, why would I want to run the |
| 178 | Win32 version? |
| 179 | A. Firstly, the Win32 version isn't that slow, especially when the screen is |
| 180 | set to some non-standard number of 'lines' or 'columns'. Secondly, the |
| 181 | 16-bit DOS version has some severe limitations: It can't do big changes and |
| 182 | it doesn't know about long file names. The Win32 version doesn't have these |
| 183 | limitations and it's faster overall (the same is true for the 32-bit DJGPP |
| 184 | DOS version of Vim). The Win32 version is smarter about handling the |
| 185 | screen, the mouse, and the keyboard than the DJGPP version is. |
| 186 | |
| 187 | Q. And what about the 16-bit DOS version versus the Win32 version on NT? |
| 188 | A. There are no good reasons to run the 16-bit DOS version on NT. The Win32 |
| 189 | version updates the screen just as fast as the 16-bit version does when |
| 190 | running on NT. All of the above disadvantages apply. Finally, DOS |
| 191 | applications can take a long time to start up and will run more slowly. On |
| 192 | non-Intel NT platforms, the DOS version is almost unusably slow, because it |
| 193 | runs on top of an 80x86 emulator. |
| 194 | |
| 195 | Q. How do I change the font? |
Bram Moolenaar | d4755bb | 2004-09-02 19:12:26 +0000 | [diff] [blame] | 196 | A. In the GUI version, you can use the 'guifont' option. Example: > |
| 197 | :set guifont=Lucida_Console:h15:cDEFAULT |
| 198 | < In the console version, you need to set the font of the console itself. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 199 | You cannot do this from within Vim. |
| 200 | |
| 201 | Q. When I change the size of the console window with ':set lines=xx' or |
| 202 | similar, the font changes! (Win95) |
| 203 | A. You have the console font set to 'Auto' in Vim's (or your MS-DOS prompt's) |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 204 | properties. This makes W95 guess (badly!) what font is best. Set an explicit |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 205 | font instead. |
| 206 | |
| 207 | Q. Why can't I paste into Vim when running Windows 95? |
| 208 | A. In the properties dialog box for the MS-DOS window, go to "MS-DOS |
| 209 | Prompt/Misc/Fast pasting" and make sure that it is NOT checked. You should |
| 210 | also do ":set paste" in Vim to avoid unexpected effects. |'paste'| |
| 211 | |
| 212 | Q. How do I type dead keys on Windows 95, in the console version? |
| 213 | (A dead key is an accent key, such as acute, grave, or umlaut, that doesn't |
| 214 | produce a character by itself, but when followed by another key, produces |
| 215 | an accented character, such as a-acute, e-grave, u-umlaut, n-tilde, and so |
| 216 | on. Very useful for most European languages. English-language keyboard |
| 217 | layouts don't use dead keys, as far as we know.) |
| 218 | A. You don't. The console mode input routines simply do not work correctly in |
| 219 | Windows 95, and I have not been able to work around them. In the words |
| 220 | of a senior developer at Microsoft: |
| 221 | Win95 console support has always been and will always be flaky. |
| 222 | |
| 223 | The flakiness is unavoidable because we are stuck between the world of |
| 224 | MS-DOS keyboard TSRs like KEYB (which wants to cook the data; |
| 225 | important for international) and the world of Win32. |
| 226 | |
| 227 | So keys that don't "exist" in MS-DOS land (like dead keys) have a |
| 228 | very tenuous existence in Win32 console land. Keys that act |
| 229 | differently between MS-DOS land and Win32 console land (like |
| 230 | capslock) will act flaky. |
| 231 | |
| 232 | Don't even _mention_ the problems with multiple language keyboard |
| 233 | layouts... |
| 234 | |
| 235 | You may be able to fashion some sort of workaround with the digraphs |
| 236 | mechanism. |digraphs| |
| 237 | |
| 238 | The best solution is to use the Win32 GUI version gvim.exe. Alternatively, |
| 239 | you can try one of the DOS versions of Vim where dead keys reportedly do |
| 240 | work. |
| 241 | |
| 242 | Q. How do I type dead keys on Windows NT? |
| 243 | A. Dead keys work on NT 3.51. Just type them as you would in any other |
| 244 | application. |
| 245 | On NT 4.0, you need to make sure that the default locale (set in the |
| 246 | Keyboard part of the Control Panel) is the same as the currently active |
| 247 | locale. Otherwise the NT code will get confused and crash! This is a NT |
| 248 | 4.0 problem, not really a Vim problem. |
| 249 | |
| 250 | Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server. |
| 251 | When I write the file, Vim does not "write through" the symlink. Instead, |
| 252 | it deletes the symbolic link and creates a new file in its place. Why? |
| 253 | A. On Unix, Vim is prepared for links (symbolic or hard). A backup copy of |
| 254 | the original file is made and then the original file is overwritten. This |
| 255 | assures that all properties of the file remain the same. On non-Unix |
| 256 | systems, the original file is renamed and a new file is written. Only the |
| 257 | protection bits are set like the original file. However, this doesn't work |
| 258 | properly when working on an NFS-mounted file system where links and other |
| 259 | things exist. The only way to fix this in the current version is not |
| 260 | making a backup file, by ":set nobackup nowritebackup" |'writebackup'| |
| 261 | |
Bram Moolenaar | d4755bb | 2004-09-02 19:12:26 +0000 | [diff] [blame] | 262 | Q. I'm using Vim to edit a file on a Unix file server through Samba. When I |
| 263 | write the file, the owner of the file is changed. Why? |
| 264 | A. When writing a file Vim renames the original file, this is a backup (in |
| 265 | case writing the file fails halfway). Then the file is written as a new |
| 266 | file. Samba then gives it the default owner for the file system, which may |
| 267 | differ from the original owner. |
| 268 | To avoid this set the 'backupcopy' option to "yes". Vim will then make a |
| 269 | copy of the file for the backup, and overwrite the original file. The |
| 270 | owner isn't changed then. |
| 271 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 272 | Q. How do I get to see the output of ":make" while it's running? |
| 273 | A. Basically what you need is to put a tee program that will copy its input |
| 274 | (the output from make) to both stdout and to the errorfile. You can find a |
Bram Moolenaar | c81e5e7 | 2007-05-05 18:24:42 +0000 | [diff] [blame] | 275 | copy of tee (and a number of other GNU tools) at |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 276 | http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net |
| 277 | Alternatively, try the more recent Cygnus version of the GNU tools at |
| 278 | http://www.cygwin.com Other Unix-style tools for Win32 are listed at |
| 279 | http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/ |
| 280 | When you do get a copy of tee, you'll need to add > |
| 281 | :set shellpipe=\|\ tee |
| 282 | < to your _vimrc. |
| 283 | |
| 284 | Q. I'm storing files on a remote machine that works with VisionFS, and files |
| 285 | disappear! |
| 286 | A. VisionFS can't handle certain dot (.) three letter extension file names. |
| 287 | SCO declares this behavior required for backwards compatibility with 16bit |
| 288 | DOS/Windows environments. The two commands below demonstrate the behavior: |
| 289 | > |
| 290 | echo Hello > file.bat~ |
| 291 | dir > file.bat |
| 292 | < |
| 293 | The result is that the "dir" command updates the "file.bat~" file, instead |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 294 | of creating a new "file.bat" file. This same behavior is exhibited in Vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 295 | when editing an existing file named "foo.bat" because the default behavior |
| 296 | of Vim is to create a temporary file with a '~' character appended to the |
| 297 | name. When the file is written, it winds up being deleted. |
| 298 | |
| 299 | Solution: Add this command to your _vimrc file: > |
| 300 | :set backupext=.temporary |
| 301 | |
| 302 | Q. How do I change the blink rate of the cursor? |
| 303 | A. You can't! This is a limitation of the NT console. NT 5.0 is reported to |
| 304 | be able to set the blink rate for all console windows at the same time. |
| 305 | |
| 306 | *:!start* |
| 307 | Q. How can I run an external command or program asynchronously? |
| 308 | A. When using :! to run an external command, you can run it with "start": > |
| 309 | :!start winfile.exe<CR> |
| 310 | < Using "start" stops Vim switching to another screen, opening a new console, |
| 311 | or waiting for the program to complete; it indicates that you are running a |
Bram Moolenaar | 8c8de83 | 2008-06-24 22:58:06 +0000 | [diff] [blame] | 312 | program that does not affect the files you are editing. Programs begun |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 313 | with :!start do not get passed Vim's open file handles, which means they do |
| 314 | not have to be closed before Vim. |
| 315 | To avoid this special treatment, use ":! start". |
Bram Moolenaar | bd8608d | 2011-05-25 17:06:22 +0200 | [diff] [blame] | 316 | There are two optional arguments (see the next Q): |
| 317 | /min the window will be minimized. |
| 318 | /b" no console window will be opened |
| 319 | You can only one of these flags at a time. A second second one will be |
| 320 | treated as the start of the command. |
| 321 | |
| 322 | Q. How do I avoid getting a window for programs that I run asynchronously? |
| 323 | A. You have two possible solutions depending on what exactly do you want: |
| 324 | 1) You may use the /min flag that would run program in minimized state with |
| 325 | no other changes. It will work equally for console and GUI applications. |
| 326 | 2) You can use /b flag to run console applications without creating a |
| 327 | console window for them (GUI applications are not affected). But you |
| 328 | should use this flag only if application you run doesn't require any |
| 329 | input. Otherwise it will get an EOF error because it's input stream |
| 330 | (stdin) would be redirected to \\.\NUL (stdour and stderr too). |
| 331 | |
| 332 | Example for a console application, run Exuberant ctags: > |
| 333 | :!start /min ctags -R . |
| 334 | < When it has finished you should see file named "tags" in your current |
| 335 | directory. You should notice the window title blinking on your taskbar. |
| 336 | This is more noticable for commands that take longer. |
| 337 | Now delete the "tags" file and run this command: > |
| 338 | :!start /b ctags -R . |
| 339 | < You should have the same "tags" file, but this time there will be no |
| 340 | blinking on the taskbar. |
| 341 | Example for a GUI application: > |
| 342 | :!start /min notepad |
| 343 | :!start /b notepad |
| 344 | < The first command runs notepad minimized and the second one runs it |
| 345 | normally. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 346 | |
| 347 | Q. I'm using Win32s, and when I try to run an external command like "make", |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 348 | Vim doesn't wait for it to finish! Help! |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 349 | A. The problem is that a 32-bit application (Vim) can't get notification from |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 350 | Windows that a 16-bit application (your DOS session) has finished. Vim |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 351 | includes a work-around for this, but you must set up your DOS commands to |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 352 | run in a window, not full-screen. Unfortunately the default when you |
| 353 | install Windows is full-screen. To change this: |
| 354 | 1) Start PIF editor (in the Main program group). |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 355 | 2) Open the file "_DEFAULT.PIF" in your Windows directory. |
| 356 | 3) Changes the display option from "Full Screen" to "Windowed". |
| 357 | 4) Save and exit. |
| 358 | |
| 359 | To test, start Vim and type > |
| 360 | :!dir C:\<CR>". |
| 361 | < You should see a DOS box window appear briefly with the directory listing. |
| 362 | |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 363 | Q. I use Vim under Win32s and NT. In NT, I can define the console to default to |
| 364 | 50 lines, so that I get a 80x50 shell when I ':sh'. Can I do the same in |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 365 | W3.1x, or am I stuck with 80x25? |
Bram Moolenaar | 13fcaaf | 2005-04-15 21:13:42 +0000 | [diff] [blame] | 366 | A. Edit SYSTEM.INI and add 'ScreenLines=50' to the [NonWindowsApp] section. DOS |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 367 | prompts and external DOS commands will now run in a 50-line window. |
| 368 | |
| 369 | vim:tw=78:fo=tcq2:ts=8:ft=help:norl: |