blob: 0eb065f72fa4a5c5e7441b3d34c7ff01e2e87d46 [file] [log] [blame]
Bram Moolenaareb490412022-06-28 13:44:46 +01001*os_win32.txt* For Vim version 9.0. Last change: 2022 May 24
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by George Reilly
5
6
7 *win32* *Win32* *MS-Windows*
8This file documents the idiosyncrasies of the Win32 version of Vim.
9
Bram Moolenaarcfa8f9a2022-06-03 21:59:47 +010010The Win32 version of Vim works on Windows XP, Vista, 7, 8, 10 and 11. There are
Bram Moolenaarcea912a2016-10-12 14:20:24 +020011both console and GUI versions.
Bram Moolenaarc095b282010-07-20 22:33:34 +020012
13The 32 bit version also runs on 64 bit MS-Windows systems.
14
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151. Known problems |win32-problems|
162. Startup |win32-startup|
173. Restore screen contents |win32-restore|
184. Using the mouse |win32-mouse|
Bram Moolenaarcea912a2016-10-12 14:20:24 +0200195. Running under Windows 95 |win32-win95|
206. Running under Windows 3.1 |win32-win3.1|
Christian Brabandt7d603842021-07-24 21:19:42 +0200217. Installation package |win32-installer|
228. Win32 mini FAQ |win32-faq|
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
24Additionally, there are a number of common Win32 and DOS items:
25File locations |dos-locations|
26Using backslashes |dos-backslash|
27Standard mappings |dos-standard-mappings|
28Screen output and colors |dos-colors|
29File formats |dos-file-formats|
30:cd command |dos-:cd|
31Interrupting |dos-CTRL-Break|
32Temp files |dos-temp-files|
33Shell option default |dos-shell|
Mike Williamsa3d1b292021-06-30 20:56:00 +020034PowerShell defaults |dos-powershell|
Bram Moolenaar071d4272004-06-13 20:20:40 +000035
36Win32 GUI |gui-w32|
37
38Credits:
39The Win32 version was written by George V. Reilly <george@reilly.org>.
40The original Windows NT port was done by Roger Knobbe <RogerK@wonderware.com>.
41The GUI version was made by George V. Reilly and Robert Webb.
42
Bram Moolenaar442b4222010-05-24 21:34:22 +020043For compiling see "src/INSTALLpc.txt". *win32-compiling*
Bram Moolenaar071d4272004-06-13 20:20:40 +000044
Bram Moolenaar835ee982022-05-22 14:50:16 +010045 *WSL*
46When using Vim on WSL (Windows Subsystem for Linux) the remarks here do not
47apply, `has('win32')` will return false then. In case you need to know
48whether Vim is running on WSL you can use `exists('$WSLENV')`.
49
Bram Moolenaar071d4272004-06-13 20:20:40 +000050==============================================================================
Bram Moolenaarcea912a2016-10-12 14:20:24 +0200511. Known problems *win32-problems*
Bram Moolenaar071d4272004-06-13 20:20:40 +000052
53When doing file name completion, Vim also finds matches for the short file
54name. But Vim will still find and use the corresponding long file name. For
55example, if you have the long file name "this_is_a_test" with the short file
56name "this_i~1", the command ":e *1" will start editing "this_is_a_test".
57
58==============================================================================
592. Startup *win32-startup*
60
61Current directory *win32-curdir*
62
63If Vim is started with a single file name argument, and it has a full path
64(starts with "x:\"), Vim assumes it was started from the file explorer and
65will set the current directory to where that file is. To avoid this when
66typing a command to start Vim, use a forward slash instead of a backslash.
67Example: >
68
69 vim c:\text\files\foo.txt
70
71Will change to the "C:\text\files" directory. >
72
73 vim c:/text\files\foo.txt
74
75Will use the current directory.
76
77
78Term option *win32-term*
79
80The only kind of terminal type that the Win32 version of Vim understands is
81"win32", which is built-in. If you set 'term' to anything else, you will
82probably get very strange behavior from Vim. Therefore Vim does not obtain
83the default value of 'term' from the environment variable "TERM".
84
Bram Moolenaar910f66f2006-04-05 20:41:53 +000085$PATH *win32-PATH*
86
87The directory of the Vim executable is appended to $PATH. This is mostly to
Bram Moolenaarb1332082013-10-06 14:22:40 +020088make "!xxd" work, as it is in the Tools menu. And it also means that when
Bram Moolenaar910f66f2006-04-05 20:41:53 +000089executable() returns 1 the executable can actually be executed.
90
Bram Moolenaar01164a62017-11-02 22:58:42 +010091Command line arguments *win32-cmdargs*
Bram Moolenaar5f148ec2016-03-07 22:59:26 +010092
Bram Moolenaar130cbfc2021-04-07 21:07:20 +020093Analysis of a command line into parameters is not standardised in MS-Windows.
Bram Moolenaar01164a62017-11-02 22:58:42 +010094Vim and gvim used to use different logic to parse it (before 7.4.432), and the
95logic was also depended on what it was compiled with. Now Vim and gvim both
96use the CommandLineToArgvW() Win32 API, so they behave in the same way.
97
98The basic rules are: *win32-backslashes*
99 a) A parameter is a sequence of graphic characters.
100 b) Parameters are separated by white space.
101 c) A parameter can be enclosed in double quotes to include white space.
102 d) A sequence of zero or more backslashes (\) and a double quote (")
103 is special. The effective number of backslashes is halved, rounded
104 down. An even number of backslashes reverses the acceptability of
105 spaces and tabs, an odd number of backslashes produces a literal
106 double quote.
107
108So:
109 " is a special double quote
110 \" is a literal double quote
111 \\" is a literal backslash and a special double quote
112 \\\" is a literal backslash and a literal double quote
113 \\\\" is 2 literal backslashes and a special double quote
114 \\\\\" is 2 literal backslashes and a literal double quote
115 etc.
116
117Example: >
118 vim "C:\My Music\freude" +"set ignorecase" +/"\"foo\\" +\"bar\\\"
119
120opens "C:\My Music\freude" and executes the line mode commands: >
121 set ignorecase; /"foo\ and /bar\"
122
123These rules are also described in the reference of the CommandLineToArgvW API:
124 https://msdn.microsoft.com/en-us/library/windows/desktop/bb776391.aspx
125
126 *win32-quotes*
127There are additional rules for quotes (which are not well documented).
128As described above, quotes inside a file name (or any other command line
129argument) can be escaped with a backslash. E.g. >
Bram Moolenaar5f148ec2016-03-07 22:59:26 +0100130 vim -c "echo 'foo\"bar'"
131
132Alternatively use three quotes to get one: >
133 vim -c "echo 'foo"""bar'"
134
135The quotation rules are:
136
1371. A `"` starts quotation.
1382. Another `"` or `""` ends quotation. If the quotation ends with `""`, a `"`
139 is produced at the end of the quoted string.
140
141Examples, with [] around an argument:
142 "foo" -> [foo]
143 "foo"" -> [foo"]
144 "foo"bar -> [foobar]
145 "foo" bar -> [foo], [bar]
146 "foo""bar -> [foo"bar]
147 "foo"" bar -> [foo"], [bar]
148 "foo"""bar" -> [foo"bar]
149
150
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151==============================================================================
1523. Restore screen contents *win32-restore*
153
154When 'restorescreen' is set (which is the default), Vim will restore the
155original contents of the console when exiting or when executing external
156commands. If you don't want this, use ":set nors". |'restorescreen'|
157
158==============================================================================
1594. Using the mouse *win32-mouse*
160
161The Win32 version of Vim supports using the mouse. If you have a two-button
162mouse, the middle button can be emulated by pressing both left and right
163buttons simultaneously - but note that in the Win32 GUI, if you have the right
164mouse button pop-up menu enabled (see 'mouse'), you should err on the side of
165pressing the left button first. |mouse-using|
166
167When the mouse doesn't work, try disabling the "Quick Edit Mode" feature of
168the console.
169
170==============================================================================
Bram Moolenaarcea912a2016-10-12 14:20:24 +02001715. Running under Windows 95 *win32-win95*
172 *windows95* *windows98* *windowsme*
173Windows 95/98/ME support was removed in patch 8.0.0029 If you want to use it
174you will need to get a version older than that.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000175
Bram Moolenaarcea912a2016-10-12 14:20:24 +0200176==============================================================================
1776. Running under Windows 3.1 *win32-win3.1*
178
Bram Moolenaard2f3a8b2018-06-19 14:35:59 +0200179 *win32s* *windows-3.1* *gui-w32s* *win16*
Bram Moolenaar6aa8cea2017-06-05 14:44:35 +0200180There was a special version of gvim that runs under Windows 3.1 and 3.11.
Bram Moolenaarf2a44e52020-01-16 19:40:38 +0100181Support was removed in patch 7.4.1364.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000182
183==============================================================================
Christian Brabandt7d603842021-07-24 21:19:42 +02001847. Installation package *win32-installer*
185
186A simple installer for windows is available at http://www.vim.org/download.php
187(stable version) and nightly builds are also available at
188https://github.com/vim/vim-win32-installer/releases/
189
190The nightly builds include 32bit and 64bit builds, have most features enabled
191and usually also contain an extra cryptographic signed installer, so Windows
192will not complain.
193
194To use the installer, simply run the exe file. The following switches are
195also supported: >
196
197 gvim_<version>.exe /S -> silent install without any dialogues
198 gvim_<version>.exe /D=C:\vim -> Install into directory c:\vim
199 -> /D must be the last argument
200 gvim_<version>.exe /S /D=c:\vim -> silent install into c:\vim
201<
202The default installation directory can alternatively be given by setting the
203$VIM environment variable.
204
205==============================================================================
2068. Win32 mini FAQ *win32-faq*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207
208Q. How do I change the font?
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000209A. In the GUI version, you can use the 'guifont' option. Example: >
210 :set guifont=Lucida_Console:h15:cDEFAULT
211< In the console version, you need to set the font of the console itself.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212 You cannot do this from within Vim.
213
Bram Moolenaar071d4272004-06-13 20:20:40 +0000214Q. How do I type dead keys on Windows NT?
215A. Dead keys work on NT 3.51. Just type them as you would in any other
216 application.
217 On NT 4.0, you need to make sure that the default locale (set in the
218 Keyboard part of the Control Panel) is the same as the currently active
219 locale. Otherwise the NT code will get confused and crash! This is a NT
220 4.0 problem, not really a Vim problem.
221
222Q. I'm using Vim to edit a symbolically linked file on a Unix NFS file server.
223 When I write the file, Vim does not "write through" the symlink. Instead,
224 it deletes the symbolic link and creates a new file in its place. Why?
225A. On Unix, Vim is prepared for links (symbolic or hard). A backup copy of
226 the original file is made and then the original file is overwritten. This
227 assures that all properties of the file remain the same. On non-Unix
228 systems, the original file is renamed and a new file is written. Only the
229 protection bits are set like the original file. However, this doesn't work
230 properly when working on an NFS-mounted file system where links and other
231 things exist. The only way to fix this in the current version is not
232 making a backup file, by ":set nobackup nowritebackup" |'writebackup'|
233
Bram Moolenaard4755bb2004-09-02 19:12:26 +0000234Q. I'm using Vim to edit a file on a Unix file server through Samba. When I
235 write the file, the owner of the file is changed. Why?
236A. When writing a file Vim renames the original file, this is a backup (in
237 case writing the file fails halfway). Then the file is written as a new
238 file. Samba then gives it the default owner for the file system, which may
239 differ from the original owner.
240 To avoid this set the 'backupcopy' option to "yes". Vim will then make a
241 copy of the file for the backup, and overwrite the original file. The
242 owner isn't changed then.
243
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244Q. How do I get to see the output of ":make" while it's running?
245A. Basically what you need is to put a tee program that will copy its input
246 (the output from make) to both stdout and to the errorfile. You can find a
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000247 copy of tee (and a number of other GNU tools) at
Bram Moolenaar071d4272004-06-13 20:20:40 +0000248 http://gnuwin32.sourceforge.net or http://unxutils.sourceforge.net
249 Alternatively, try the more recent Cygnus version of the GNU tools at
250 http://www.cygwin.com Other Unix-style tools for Win32 are listed at
251 http://directory.google.com/Top/Computers/Software/Operating_Systems/Unix/Win32/
252 When you do get a copy of tee, you'll need to add >
253 :set shellpipe=\|\ tee
254< to your _vimrc.
255
256Q. I'm storing files on a remote machine that works with VisionFS, and files
257 disappear!
258A. VisionFS can't handle certain dot (.) three letter extension file names.
259 SCO declares this behavior required for backwards compatibility with 16bit
260 DOS/Windows environments. The two commands below demonstrate the behavior:
261>
Bram Moolenaar7ceefb32020-05-01 16:07:38 +0200262 echo Hello > file.bat~
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263 dir > file.bat
264<
265 The result is that the "dir" command updates the "file.bat~" file, instead
Bram Moolenaar13fcaaf2005-04-15 21:13:42 +0000266 of creating a new "file.bat" file. This same behavior is exhibited in Vim
Bram Moolenaar071d4272004-06-13 20:20:40 +0000267 when editing an existing file named "foo.bat" because the default behavior
268 of Vim is to create a temporary file with a '~' character appended to the
269 name. When the file is written, it winds up being deleted.
270
271 Solution: Add this command to your _vimrc file: >
272 :set backupext=.temporary
273
274Q. How do I change the blink rate of the cursor?
275A. You can't! This is a limitation of the NT console. NT 5.0 is reported to
276 be able to set the blink rate for all console windows at the same time.
277
278 *:!start*
Bram Moolenaarb2964f22017-03-21 19:29:26 +0100279Q. How can I asynchronously run an external command or program, or open a
280 document or URL with its default program?
281A. When using :! to run an external command, you can run it with "start". For
282 example, to run notepad: >
283 :!start notepad
284< To open "image.jpg" with the default image viewer: >
285 :!start image.jpg
286< To open the folder of the current file in Windows Explorer: >
287 :!start %:h
288< To open the Vim home page with the default browser: >
289 :!start http://www.vim.org/
290<
291 Using "start" stops Vim switching to another screen, opening a new console,
Bram Moolenaar071d4272004-06-13 20:20:40 +0000292 or waiting for the program to complete; it indicates that you are running a
Bram Moolenaar8c8de832008-06-24 22:58:06 +0000293 program that does not affect the files you are editing. Programs begun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000294 with :!start do not get passed Vim's open file handles, which means they do
295 not have to be closed before Vim.
296 To avoid this special treatment, use ":! start".
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200297 There are two optional arguments (see the next Q):
Bram Moolenaar1aeaf8c2012-05-18 13:46:39 +0200298 /min the window will be minimized
299 /b no console window will be opened
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200300 You can use only one of these flags at a time. A second one will be
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200301 treated as the start of the command.
Bram Moolenaar944697a2022-02-20 19:48:20 +0000302 *windows-asynchronously*
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200303Q. How do I avoid getting a window for programs that I run asynchronously?
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200304A. You have two possible solutions depending on what you want:
Bram Moolenaar251e1912011-06-19 05:09:16 +0200305 1) You may use the /min flag in order to run program in a minimized state
306 with no other changes. It will work equally for console and GUI
307 applications.
308 2) You can use the /b flag to run console applications without creating a
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200309 console window for them (GUI applications are not affected). But you
Bram Moolenaar251e1912011-06-19 05:09:16 +0200310 should use this flag only if the application you run doesn't require any
311 input. Otherwise it will get an EOF error because its input stream
Bram Moolenaar5302d9e2011-09-14 17:55:08 +0200312 (stdin) would be redirected to \\.\NUL (stdout and stderr too).
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200313
314 Example for a console application, run Exuberant ctags: >
315 :!start /min ctags -R .
Bram Moolenaar944697a2022-02-20 19:48:20 +0000316< When it has finished you should see file named "tags" in your current
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200317 directory. You should notice the window title blinking on your taskbar.
Bram Moolenaar34401cc2014-08-29 15:12:19 +0200318 This is more noticeable for commands that take longer.
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200319 Now delete the "tags" file and run this command: >
320 :!start /b ctags -R .
Bram Moolenaar944697a2022-02-20 19:48:20 +0000321< You should have the same "tags" file, but this time there will be no
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200322 blinking on the taskbar.
323 Example for a GUI application: >
324 :!start /min notepad
325 :!start /b notepad
Bram Moolenaar944697a2022-02-20 19:48:20 +0000326< The first command runs notepad minimized and the second one runs it
Bram Moolenaarbd8608d2011-05-25 17:06:22 +0200327 normally.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000328
Bram Moolenaar3a991dd2014-10-02 01:41:41 +0200329 *windows-icon*
330Q. I don't like the Vim icon, can I change it?
331A. Yes, place your favorite icon in bitmaps/vim.ico in a directory of
332 'runtimepath'. For example ~/vimfiles/bitmaps/vim.ico.
333
334
Bram Moolenaar2c64ca12018-10-19 16:22:31 +0200335 vim:tw=78:ts=8:noet:ft=help:norl: