blob: 58a1f2ebc96475c02fa7ff4813c2c8bea21a97dd [file] [log] [blame]
Bram Moolenaarbb76f242016-09-12 14:24:39 +02001*editing.txt* For Vim version 8.0. Last change: 2016 Aug 06
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Editing files *edit-files*
8
91. Introduction |edit-intro|
102. Editing a file |edit-a-file|
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000113. The argument list |argument-list|
124. Writing |writing|
135. Writing and quitting |write-quit|
146. Dialogs |edit-dialogs|
157. The current directory |current-directory|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000168. Editing binary files |edit-binary|
179. Encryption |encryption|
1810. Timestamps |timestamps|
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001911. File Searching |file-searching|
Bram Moolenaar071d4272004-06-13 20:20:40 +000020
21==============================================================================
221. Introduction *edit-intro*
23
24Editing a file with Vim means:
25
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000261. reading the file into a buffer
Bram Moolenaar071d4272004-06-13 20:20:40 +0000272. changing the buffer with editor commands
283. writing the buffer into a file
29
30 *current-file*
31As long as you don't write the buffer, the original file remains unchanged.
32If you start editing a file (read a file into the buffer), the file name is
Bram Moolenaard4755bb2004-09-02 19:12:26 +000033remembered as the "current file name". This is also known as the name of the
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000034current buffer. It can be used with "%" on the command line |:_%|.
Bram Moolenaar071d4272004-06-13 20:20:40 +000035
36 *alternate-file*
37If there already was a current file name, then that one becomes the alternate
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000038file name. It can be used with "#" on the command line |:_#| and you can use
39the |CTRL-^| command to toggle between the current and the alternate file.
40However, the alternate file name is not changed when |:keepalt| is used.
Bram Moolenaar36782082013-11-28 13:53:34 +010041An alternate file name is remembered for each window.
Bram Moolenaard4755bb2004-09-02 19:12:26 +000042
43 *:keepalt* *:keepa*
44:keepalt {cmd} Execute {cmd} while keeping the current alternate file
45 name. Note that commands invoked indirectly (e.g.,
46 with a function) may still set the alternate file
47 name. {not in Vi}
48
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000049All file names are remembered in the buffer list. When you enter a file name,
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000050for editing (e.g., with ":e filename") or writing (e.g., with ":w filename"),
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000051the file name is added to the list. You can use the buffer list to remember
52which files you edited and to quickly switch from one file to another (e.g.,
53to copy text) with the |CTRL-^| command. First type the number of the file
54and then hit CTRL-^. {Vi: only one alternate file name is remembered}
55
Bram Moolenaar071d4272004-06-13 20:20:40 +000056
57CTRL-G or *CTRL-G* *:f* *:fi* *:file*
Bram Moolenaard9d30582005-05-18 22:10:28 +000058:f[ile] Prints the current file name (as typed, unless ":cd"
59 was used), the cursor position (unless the 'ruler'
60 option is set), and the file status (readonly,
61 modified, read errors, new file). See the 'shortmess'
62 option about how to make this message shorter.
63 {Vi does not include column number}
Bram Moolenaar071d4272004-06-13 20:20:40 +000064
Bram Moolenaar325b7a22004-07-05 15:58:32 +000065:f[ile]! like |:file|, but don't truncate the name even when
66 'shortmess' indicates this.
67
Bram Moolenaar071d4272004-06-13 20:20:40 +000068{count}CTRL-G Like CTRL-G, but prints the current file name with
69 full path. If the count is higher than 1 the current
70 buffer number is also given. {not in Vi}
71
72 *g_CTRL-G* *word-count* *byte-count*
Bram Moolenaar7c626922005-02-07 22:01:03 +000073g CTRL-G Prints the current position of the cursor in five
74 ways: Column, Line, Word, Character and Byte. If the
75 number of Characters and Bytes is the same then the
76 Character position is omitted.
77 If there are characters in the line that take more
78 than one position on the screen (<Tab> or special
79 character), both the "real" column and the screen
80 column are shown, separated with a dash.
Bram Moolenaared767a22016-01-03 22:49:16 +010081 Also see the 'ruler' option and the |wordcount()|
82 function.
83 {not in Vi}
Bram Moolenaar071d4272004-06-13 20:20:40 +000084
85 *v_g_CTRL-G*
Bram Moolenaar7c626922005-02-07 22:01:03 +000086{Visual}g CTRL-G Similar to "g CTRL-G", but Word, Character, Line, and
87 Byte counts for the visually selected region are
88 displayed.
89 In Blockwise mode, Column count is also shown. (For
Bram Moolenaar071d4272004-06-13 20:20:40 +000090 {Visual} see |Visual-mode|.)
91 {not in VI}
92
93 *:file_f*
Bram Moolenaar325b7a22004-07-05 15:58:32 +000094:f[ile][!] {name} Sets the current file name to {name}. The optional !
95 avoids truncating the message, as with |:file|.
Bram Moolenaar7171abe2004-10-11 10:06:20 +000096 If the buffer did have a name, that name becomes the
97 |alternate-file| name. An unlisted buffer is created
98 to hold the old name.
Bram Moolenaar10de2da2005-01-27 14:33:00 +000099 *:0file*
Bram Moolenaar325b7a22004-07-05 15:58:32 +0000100:0f[ile][!] Remove the name of the current buffer. The optional !
101 avoids truncating the message, as with |:file|. {not
102 in Vi}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000103
104:buffers
105:files
106:ls List all the currently known file names. See
107 'windows.txt' |:files| |:buffers| |:ls|. {not in
108 Vi}
109
110Vim will remember the full path name of a file name that you enter. In most
111cases when the file name is displayed only the name you typed is shown, but
112the full path name is being used if you used the ":cd" command |:cd|.
113
114 *home-replace*
115If the environment variable $HOME is set, and the file name starts with that
116string, it is often displayed with HOME replaced with "~". This was done to
117keep file names short. When reading or writing files the full name is still
118used, the "~" is only used when displaying file names. When replacing the
119file name would result in just "~", "~/" is used instead (to avoid confusion
Bram Moolenaar81695252004-12-29 20:58:21 +0000120between options set to $HOME with 'backupext' set to "~").
Bram Moolenaar071d4272004-06-13 20:20:40 +0000121
122When writing the buffer, the default is to use the current file name. Thus
123when you give the "ZZ" or ":wq" command, the original file will be
124overwritten. If you do not want this, the buffer can be written into another
125file by giving a file name argument to the ":write" command. For example: >
126
127 vim testfile
128 [change the buffer with editor commands]
129 :w newfile
130 :q
131
132This will create a file "newfile", that is a modified copy of "testfile".
133The file "testfile" will remain unchanged. Anyway, if the 'backup' option is
134set, Vim renames or copies the original file before it will be overwritten.
135You can use this file if you discover that you need the original file. See
136also the 'patchmode' option. The name of the backup file is normally the same
137as the original file with 'backupext' appended. The default "~" is a bit
138strange to avoid accidentally overwriting existing files. If you prefer ".bak"
139change the 'backupext' option. Extra dots are replaced with '_' on MS-DOS
140machines, when Vim has detected that an MS-DOS-like filesystem is being used
141(e.g., messydos or crossdos) or when the 'shortname' option is on. The
142backup file can be placed in another directory by setting 'backupdir'.
143
144 *auto-shortname*
145Technical: On the Amiga you can use 30 characters for a file name. But on an
146 MS-DOS-compatible filesystem only 8 plus 3 characters are
147 available. Vim tries to detect the type of filesystem when it is
148 creating the .swp file. If an MS-DOS-like filesystem is suspected,
149 a flag is set that has the same effect as setting the 'shortname'
150 option. This flag will be reset as soon as you start editing a
151 new file. The flag will be used when making the file name for the
152 ".swp" and ".~" files for the current file. But when you are
153 editing a file in a normal filesystem and write to an MS-DOS-like
154 filesystem the flag will not have been set. In that case the
155 creation of the ".~" file may fail and you will get an error
156 message. Use the 'shortname' option in this case.
157
158When you started editing without giving a file name, "No File" is displayed in
159messages. If the ":write" command is used with a file name argument, the file
160name for the current file is set to that file name. This only happens when
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000161the 'F' flag is included in 'cpoptions' (by default it is included) |cpo-F|.
162This is useful when entering text in an empty buffer and then writing it to a
163file. If 'cpoptions' contains the 'f' flag (by default it is NOT included)
164|cpo-f| the file name is set for the ":read file" command. This is useful
165when starting Vim without an argument and then doing ":read file" to start
166editing a file.
167When the file name was set and 'filetype' is empty the filetype detection
168autocommands will be triggered.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169 *not-edited*
170Because the file name was set without really starting to edit that file, you
171are protected from overwriting that file. This is done by setting the
172"notedited" flag. You can see if this flag is set with the CTRL-G or ":file"
173command. It will include "[Not edited]" when the "notedited" flag is set.
174When writing the buffer to the current file name (with ":w!"), the "notedited"
175flag is reset.
176
177 *abandon*
178Vim remembers whether you have changed the buffer. You are protected from
179losing the changes you made. If you try to quit without writing, or want to
180start editing another file, Vim will refuse this. In order to overrule this
181protection, add a '!' to the command. The changes will then be lost. For
182example: ":q" will not work if the buffer was changed, but ":q!" will. To see
183whether the buffer was changed use the "CTRL-G" command. The message includes
184the string "[Modified]" if the buffer has been changed.
185
186If you want to automatically save the changes without asking, switch on the
187'autowriteall' option. 'autowrite' is the associated Vi-compatible option
188that does not work for all commands.
189
190If you want to keep the changed buffer without saving it, switch on the
Bram Moolenaar9d98fe92013-08-03 18:35:36 +0200191'hidden' option. See |hidden-buffer|. Some commands work like this even when
192'hidden' is not set, check the help for the command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
194==============================================================================
1952. Editing a file *edit-a-file*
196
Bram Moolenaar9d98fe92013-08-03 18:35:36 +0200197 *:e* *:edit* *reload*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198:e[dit] [++opt] [+cmd] Edit the current file. This is useful to re-edit the
199 current file, when it has been changed outside of Vim.
200 This fails when changes have been made to the current
201 buffer and 'autowriteall' isn't set or the file can't
202 be written.
203 Also see |++opt| and |+cmd|.
204 {Vi: no ++opt}
205
Bram Moolenaar9d98fe92013-08-03 18:35:36 +0200206 *:edit!* *discard*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000207:e[dit]! [++opt] [+cmd]
208 Edit the current file always. Discard any changes to
209 the current buffer. This is useful if you want to
210 start all over again.
211 Also see |++opt| and |+cmd|.
212 {Vi: no ++opt}
213
214 *:edit_f*
215:e[dit] [++opt] [+cmd] {file}
216 Edit {file}.
217 This fails when changes have been made to the current
218 buffer, unless 'hidden' is set or 'autowriteall' is
219 set and the file can be written.
220 Also see |++opt| and |+cmd|.
221 {Vi: no ++opt}
222
223 *:edit!_f*
224:e[dit]! [++opt] [+cmd] {file}
225 Edit {file} always. Discard any changes to the
226 current buffer.
227 Also see |++opt| and |+cmd|.
228 {Vi: no ++opt}
229
230:e[dit] [++opt] [+cmd] #[count]
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000231 Edit the [count]th buffer (as shown by |:files|).
232 This command does the same as [count] CTRL-^. But ":e
233 #" doesn't work if the alternate buffer doesn't have a
234 file name, while CTRL-^ still works then.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000235 Also see |++opt| and |+cmd|.
236 {Vi: no ++opt}
237
238 *:ene* *:enew*
239:ene[w] Edit a new, unnamed buffer. This fails when changes
240 have been made to the current buffer, unless 'hidden'
241 is set or 'autowriteall' is set and the file can be
242 written.
243 If 'fileformats' is not empty, the first format given
244 will be used for the new buffer. If 'fileformats' is
245 empty, the 'fileformat' of the current buffer is used.
246 {not in Vi}
247
248 *:ene!* *:enew!*
249:ene[w]! Edit a new, unnamed buffer. Discard any changes to
250 the current buffer.
251 Set 'fileformat' like |:enew|.
252 {not in Vi}
253
254 *:fin* *:find*
255:fin[d][!] [++opt] [+cmd] {file}
256 Find {file} in 'path' and then |:edit| it.
257 {not in Vi} {not available when the |+file_in_path|
258 feature was disabled at compile time}
259
260:{count}fin[d][!] [++opt] [+cmd] {file}
261 Just like ":find", but use the {count} match in
262 'path'. Thus ":2find file" will find the second
263 "file" found in 'path'. When there are fewer matches
264 for the file in 'path' than asked for, you get an
265 error message.
266
267 *:ex*
268:ex [++opt] [+cmd] [file]
269 Same as |:edit|.
270
271 *:vi* *:visual*
272:vi[sual][!] [++opt] [+cmd] [file]
Bram Moolenaar81695252004-12-29 20:58:21 +0000273 When used in Ex mode: Leave |Ex-mode|, go back to
Bram Moolenaar071d4272004-06-13 20:20:40 +0000274 Normal mode. Otherwise same as |:edit|.
275
276 *:vie* *:view*
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100277:vie[w][!] [++opt] [+cmd] file
Bram Moolenaar81695252004-12-29 20:58:21 +0000278 When used in Ex mode: Leave |Ex mode|, go back to
Bram Moolenaar071d4272004-06-13 20:20:40 +0000279 Normal mode. Otherwise same as |:edit|, but set
280 'readonly' option for this buffer. {not in Vi}
281
282 *CTRL-^* *CTRL-6*
Bram Moolenaar662db672011-03-22 14:05:35 +0100283CTRL-^ Edit the alternate file. Mostly the alternate file is
284 the previously edited file. This is a quick way to
285 toggle between two files. It is equivalent to ":e #",
286 except that it also works when there is no file name.
287
Bram Moolenaar071d4272004-06-13 20:20:40 +0000288 If the 'autowrite' or 'autowriteall' option is on and
289 the buffer was changed, write it.
290 Mostly the ^ character is positioned on the 6 key,
291 pressing CTRL and 6 then gets you what we call CTRL-^.
292 But on some non-US keyboards CTRL-^ is produced in
293 another way.
294
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000295{count}CTRL-^ Edit [count]th file in the buffer list (equivalent to
296 ":e #[count]"). This is a quick way to switch between
297 files.
298 See |CTRL-^| above for further details.
299 {not in Vi}
300
Bram Moolenaar071d4272004-06-13 20:20:40 +0000301[count]]f *]f* *[f*
302[count][f Same as "gf". Deprecated.
303
304 *gf* *E446* *E447*
305[count]gf Edit the file whose name is under or after the cursor.
306 Mnemonic: "goto file".
307 Uses the 'isfname' option to find out which characters
308 are supposed to be in a file name. Trailing
Bram Moolenaar2b8388b2015-02-28 13:11:45 +0100309 punctuation characters ".,:;!" are ignored. Escaped
310 spaces "\ " are reduced to a single space.
Bram Moolenaarc236c162008-07-13 17:41:49 +0000311 Uses the 'path' option as a list of directory names to
312 look for the file. See the 'path' option for details
313 about relative directories and wildcards.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314 Uses the 'suffixesadd' option to check for file names
315 with a suffix added.
316 If the file can't be found, 'includeexpr' is used to
317 modify the name and another attempt is done.
318 If a [count] is given, the count'th file that is found
319 in the 'path' is edited.
320 This command fails if Vim refuses to |abandon| the
321 current file.
Bram Moolenaar8dff8182006-04-06 20:18:50 +0000322 If you want to edit the file in a new window use
323 |CTRL-W_CTRL-F|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000324 If you do want to edit a new file, use: >
325 :e <cfile>
326< To make gf always work like that: >
327 :map gf :e <cfile><CR>
328< If the name is a hypertext link, that looks like
329 "type://machine/path", you need the |netrw| plugin.
330 For Unix the '~' character is expanded, like in
331 "~user/file". Environment variables are expanded too
332 |expand-env|.
333 {not in Vi}
334 {not available when the |+file_in_path| feature was
335 disabled at compile time}
336
337 *v_gf*
338{Visual}[count]gf Same as "gf", but the highlighted text is used as the
339 name of the file to edit. 'isfname' is ignored.
340 Leading blanks are skipped, otherwise all blanks and
341 special characters are included in the file name.
342 (For {Visual} see |Visual-mode|.)
343 {not in VI}
344
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000345 *gF*
346[count]gF Same as "gf", except if a number follows the file
347 name, then the cursor is positioned on that line in
348 the file. The file name and the number must be
349 separated by a non-filename (see 'isfname') and
350 non-numeric character. White space between the
351 filename, the separator and the number are ignored.
Bram Moolenaard8fc5c02006-04-29 21:55:22 +0000352 Examples:
353 eval.c:10 ~
354 eval.c @ 20 ~
355 eval.c (30) ~
356 eval.c 40 ~
357
Bram Moolenaard1f56e62006-02-22 21:25:37 +0000358 *v_gF*
359{Visual}[count]gF Same as "v_gf".
360
Bram Moolenaar071d4272004-06-13 20:20:40 +0000361These commands are used to start editing a single file. This means that the
362file is read into the buffer and the current file name is set. The file that
363is opened depends on the current directory, see |:cd|.
364
365See |read-messages| for an explanation of the message that is given after the
366file has been read.
367
368You can use the ":e!" command if you messed up the buffer and want to start
369all over again. The ":e" command is only useful if you have changed the
370current file name.
371
372 *:filename* *{file}*
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000373Besides the things mentioned here, more special items for where a filename is
374expected are mentioned at |cmdline-special|.
375
Bram Moolenaarc236c162008-07-13 17:41:49 +0000376Note for systems other than Unix: When using a command that accepts a single
377file name (like ":edit file") spaces in the file name are allowed, but
378trailing spaces are ignored. This is useful on systems that regularly embed
379spaces in file names (like MS-Windows and the Amiga). Example: The command
380":e Long File Name " will edit the file "Long File Name". When using a
381command that accepts more than one file name (like ":next file1 file2")
382embedded spaces must be escaped with a backslash.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000383
Bram Moolenaar9964e462007-05-05 17:54:07 +0000384 *wildcard* *wildcards*
Bram Moolenaar30b65812012-07-12 22:01:11 +0200385Wildcards in {file} are expanded, but as with file completion, 'wildignore'
386and 'suffixes' apply. Which wildcards are supported depends on the system.
387These are the common ones:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000388 ? matches one character
Bram Moolenaar02743632005-07-25 20:42:36 +0000389 * matches anything, including nothing
390 ** matches anything, including nothing, recurses into directories
Bram Moolenaar071d4272004-06-13 20:20:40 +0000391 [abc] match 'a', 'b' or 'c'
Bram Moolenaar02743632005-07-25 20:42:36 +0000392
Bram Moolenaar071d4272004-06-13 20:20:40 +0000393To avoid the special meaning of the wildcards prepend a backslash. However,
394on MS-Windows the backslash is a path separator and "path\[abc]" is still seen
395as a wildcard when "[" is in the 'isfname' option. A simple way to avoid this
Bram Moolenaar7db8f6f2016-03-29 23:12:46 +0200396is to use "path\[[]abc]", this matches the file "path\[abc]".
Bram Moolenaar071d4272004-06-13 20:20:40 +0000397
Bram Moolenaar02743632005-07-25 20:42:36 +0000398 *starstar-wildcard*
399Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
400This allows searching a directory tree. This goes up to 100 directories deep.
Bram Moolenaar9b451252012-08-15 17:43:31 +0200401Note there are some commands where this works slightly differently, see
Bram Moolenaarc236c162008-07-13 17:41:49 +0000402|file-searching|.
Bram Moolenaar02743632005-07-25 20:42:36 +0000403Example: >
404 :n **/*.txt
405Finds files:
Bram Moolenaar38a55632016-02-15 22:07:32 +0100406 aaa.txt ~
407 subdir/bbb.txt ~
408 a/b/c/d/ccc.txt ~
409When non-wildcard characters are used right before or after "**" these are
410only matched in the top directory. They are not used for directories further
411down in the tree. For example: >
412 :n /usr/inc**/types.h
Bram Moolenaar02743632005-07-25 20:42:36 +0000413Finds files:
Bram Moolenaar38a55632016-02-15 22:07:32 +0100414 /usr/include/types.h ~
415 /usr/include/sys/types.h ~
416 /usr/inc/old/types.h ~
417Note that the path with "/sys" is included because it does not need to match
418"/inc". Thus it's like matching "/usr/inc*/*/*...", not
419"/usr/inc*/inc*/inc*".
420
Bram Moolenaar071d4272004-06-13 20:20:40 +0000421 *backtick-expansion* *`-expansion*
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +0200422On Unix and a few other systems you can also use backticks for the file name
423argument, for example: >
424 :next `find . -name ver\\*.c -print`
Bram Moolenaar88774fd2015-08-25 19:52:04 +0200425 :view `ls -t *.patch \| head -n1`
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +0200426The backslashes before the star are required to prevent the shell from
427expanding "ver*.c" prior to execution of the find program. The backslash
428before the shell pipe symbol "|" prevents Vim from parsing it as command
429termination.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000430This also works for most other systems, with the restriction that the
431backticks must be around the whole item. It is not possible to have text
432directly before the first or just after the last backtick.
433
Bram Moolenaared203462004-06-16 11:19:22 +0000434 *`=*
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +0200435You can have the backticks expanded as a Vim expression, instead of as an
436external command, by putting an equal sign right after the first backtick,
437e.g.: >
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000438 :e `=tempname()`
439The expression can contain just about anything, thus this can also be used to
Bram Moolenaar30b65812012-07-12 22:01:11 +0200440avoid the special meaning of '"', '|', '%' and '#'. However, 'wildignore'
Bram Moolenaar00154502013-02-13 16:15:55 +0100441does apply like to other wildcards.
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +0200442
Bram Moolenaar88774fd2015-08-25 19:52:04 +0200443Environment variables in the expression are expanded when evaluating the
444expression, thus this works: >
445 :e `=$HOME . '/.vimrc'`
446This does not work, $HOME is inside a string and used literally: >
447 :e `='$HOME' . '/.vimrc'`
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +0200448
Bram Moolenaar30b65812012-07-12 22:01:11 +0200449If the expression returns a string then names are to be separated with line
450breaks. When the result is a |List| then each item is used as a name. Line
451breaks also separate names.
Bram Moolenaarf9132812015-07-21 19:19:13 +0200452Note that such expressions are only supported in places where a filename is
453expected as an argument to an Ex-command.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000454
455 *++opt* *[++opt]*
Bram Moolenaarb0bf8582005-12-13 20:02:15 +0000456The [++opt] argument can be used to force the value of 'fileformat',
457'fileencoding' or 'binary' to a value for one command, and to specify the
458behavior for bad characters. The form is: >
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000459 ++{optname}
460Or: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000461 ++{optname}={value}
462
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000463Where {optname} is one of: *++ff* *++enc* *++bin* *++nobin* *++edit*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000464 ff or fileformat overrides 'fileformat'
465 enc or encoding overrides 'fileencoding'
466 bin or binary sets 'binary'
467 nobin or nobinary resets 'binary'
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000468 bad specifies behavior for bad characters
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000469 edit for |:read| only: keep option values as if editing
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000470 a file
Bram Moolenaar071d4272004-06-13 20:20:40 +0000471
472{value} cannot contain white space. It can be any valid value for these
473options. Examples: >
474 :e ++ff=unix
475This edits the same file again with 'fileformat' set to "unix". >
476
477 :w ++enc=latin1 newfile
478This writes the current buffer to "newfile" in latin1 format.
479
Bram Moolenaarb0bf8582005-12-13 20:02:15 +0000480There may be several ++opt arguments, separated by white space. They must all
481appear before any |+cmd| argument.
482
483 *++bad*
484The argument of "++bad=" specifies what happens with characters that can't be
485converted and illegal bytes. It can be one of three things:
486 ++bad=X A single-byte character that replaces each bad character.
487 ++bad=keep Keep bad characters without conversion. Note that this may
Bram Moolenaarc9b4b052006-04-30 18:54:39 +0000488 result in illegal bytes in your text!
Bram Moolenaarb0bf8582005-12-13 20:02:15 +0000489 ++bad=drop Remove the bad characters.
490
491The default is like "++bad=?": Replace each bad character with a question
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100492mark. In some places an inverted question mark is used (0xBF).
493
494Note that not all commands use the ++bad argument, even though they do not
495give an error when you add it. E.g. |:write|.
Bram Moolenaarb0bf8582005-12-13 20:02:15 +0000496
Bram Moolenaar071d4272004-06-13 20:20:40 +0000497Note that when reading, the 'fileformat' and 'fileencoding' options will be
498set to the used format. When writing this doesn't happen, thus a next write
499will use the old value of the option. Same for the 'binary' option.
500
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501
502 *+cmd* *[+cmd]*
503The [+cmd] argument can be used to position the cursor in the newly opened
504file, or execute any other command:
505 + Start at the last line.
506 +{num} Start at line {num}.
507 +/{pat} Start at first line containing {pat}.
508 +{command} Execute {command} after opening the new file.
509 {command} is any Ex command.
510To include a white space in the {pat} or {command}, precede it with a
511backslash. Double the number of backslashes. >
512 :edit +/The\ book file
513 :edit +/dir\ dirname\\ file
514 :edit +set\ dir=c:\\\\temp file
515Note that in the last example the number of backslashes is halved twice: Once
516for the "+cmd" argument and once for the ":set" command.
517
518 *file-formats*
519The 'fileformat' option sets the <EOL> style for a file:
520'fileformat' characters name ~
521 "dos" <CR><NL> or <NL> DOS format *DOS-format*
522 "unix" <NL> Unix format *Unix-format*
523 "mac" <CR> Mac format *Mac-format*
524Previously 'textmode' was used. It is obsolete now.
525
526When reading a file, the mentioned characters are interpreted as the <EOL>.
527In DOS format (default for MS-DOS, OS/2 and Win32), <CR><NL> and <NL> are both
528interpreted as the <EOL>. Note that when writing the file in DOS format,
529<CR> characters will be added for each single <NL>. Also see |file-read|.
530
531When writing a file, the mentioned characters are used for <EOL>. For DOS
532format <CR><NL> is used. Also see |DOS-format-write|.
533
534You can read a file in DOS format and write it in Unix format. This will
535replace all <CR><NL> pairs by <NL> (assuming 'fileformats' includes "dos"): >
536 :e file
537 :set fileformat=unix
538 :w
539If you read a file in Unix format and write with DOS format, all <NL>
540characters will be replaced with <CR><NL> (assuming 'fileformats' includes
541"unix"): >
542 :e file
543 :set fileformat=dos
544 :w
545
546If you start editing a new file and the 'fileformats' option is not empty
547(which is the default), Vim will try to detect whether the lines in the file
548are separated by the specified formats. When set to "unix,dos", Vim will
549check for lines with a single <NL> (as used on Unix and Amiga) or by a <CR>
550<NL> pair (MS-DOS). Only when ALL lines end in <CR><NL>, 'fileformat' is set
551to "dos", otherwise it is set to "unix". When 'fileformats' includes "mac",
552and no <NL> characters are found in the file, 'fileformat' is set to "mac".
553
554If the 'fileformat' option is set to "dos" on non-MS-DOS systems the message
555"[dos format]" is shown to remind you that something unusual is happening. On
556MS-DOS systems you get the message "[unix format]" if 'fileformat' is set to
557"unix". On all systems but the Macintosh you get the message "[mac format]"
558if 'fileformat' is set to "mac".
559
560If the 'fileformats' option is empty and DOS format is used, but while reading
561a file some lines did not end in <CR><NL>, "[CR missing]" will be included in
562the file message.
563If the 'fileformats' option is empty and Mac format is used, but while reading
564a file a <NL> was found, "[NL missing]" will be included in the file message.
565
566If the new file does not exist, the 'fileformat' of the current buffer is used
567when 'fileformats' is empty. Otherwise the first format from 'fileformats' is
568used for the new file.
569
570Before editing binary, executable or Vim script files you should set the
571'binary' option. A simple way to do this is by starting Vim with the "-b"
572option. This will avoid the use of 'fileformat'. Without this you risk that
573single <NL> characters are unexpectedly replaced with <CR><NL>.
574
575You can encrypt files that are written by setting the 'key' option. This
576provides some security against others reading your files. |encryption|
577
578
Bram Moolenaar071d4272004-06-13 20:20:40 +0000579==============================================================================
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00005803. The argument list *argument-list* *arglist*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000581
582If you give more than one file name when starting Vim, this list is remembered
583as the argument list. You can jump to each file in this list.
584
585Do not confuse this with the buffer list, which you can see with the
586|:buffers| command. The argument list was already present in Vi, the buffer
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000587list is new in Vim. Every file name in the argument list will also be present
588in the buffer list (unless it was deleted with |:bdel| or |:bwipe|). But it's
589common that names in the buffer list are not in the argument list.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000590
591This subject is introduced in section |07.2| of the user manual.
592
593There is one global argument list, which is used for all windows by default.
594It is possible to create a new argument list local to a window, see
595|:arglocal|.
596
597You can use the argument list with the following commands, and with the
598expression functions |argc()| and |argv()|. These all work on the argument
599list of the current window.
600
601 *:ar* *:args*
602:ar[gs] Print the argument list, with the current file in
603 square brackets.
604
605:ar[gs] [++opt] [+cmd] {arglist} *:args_f*
606 Define {arglist} as the new argument list and edit
607 the first one. This fails when changes have been made
608 and Vim does not want to |abandon| the current buffer.
609 Also see |++opt| and |+cmd|.
610 {Vi: no ++opt}
611
612:ar[gs]! [++opt] [+cmd] {arglist} *:args_f!*
613 Define {arglist} as the new argument list and edit
614 the first one. Discard any changes to the current
615 buffer.
616 Also see |++opt| and |+cmd|.
617 {Vi: no ++opt}
618
619:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
620 Add {name} to the argument list and edit it.
621 When {name} already exists in the argument list, this
622 entry is edited.
623 This is like using |:argadd| and then |:edit|.
624 Note that only one file name is allowed, and spaces
625 inside the file name are allowed, like with |:edit|.
626 [count] is used like with |:argadd|.
627 [!] is required if the current file cannot be
628 |abandon|ed.
629 Also see |++opt| and |+cmd|.
630 {not in Vi}
631
632:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
Bram Moolenaar91e15e12014-09-19 22:38:48 +0200633:[count]arga[dd]
634 Add the {name}s to the argument list. When {name} is
Bram Moolenaared32d942014-12-06 23:33:00 +0100635 omitted add the current buffer name to the argument
Bram Moolenaar91e15e12014-09-19 22:38:48 +0200636 list.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000637 If [count] is omitted, the {name}s are added just
638 after the current entry in the argument list.
639 Otherwise they are added after the [count]'th file.
640 If the argument list is "a b c", and "b" is the
641 current argument, then these commands result in:
642 command new argument list ~
643 :argadd x a b x c
644 :0argadd x x a b c
645 :1argadd x a x b c
Bram Moolenaared32d942014-12-06 23:33:00 +0100646 :$argadd x a b c x
Bram Moolenaar85084ef2016-01-17 22:26:33 +0100647 And after the last one:
Bram Moolenaared32d942014-12-06 23:33:00 +0100648 :+2argadd y a b c x y
Bram Moolenaar071d4272004-06-13 20:20:40 +0000649 There is no check for duplicates, it is possible to
650 add a file to the argument list twice.
651 The currently edited file is not changed.
652 {not in Vi} {not available when compiled without the
653 |+listcmds| feature}
654 Note: you can also use this method: >
655 :args ## x
656< This will add the "x" item and sort the new list.
657
658:argd[elete] {pattern} .. *:argd* *:argdelete* *E480*
659 Delete files from the argument list that match the
660 {pattern}s. {pattern} is used like a file pattern,
661 see |file-pattern|. "%" can be used to delete the
662 current entry.
663 This command keeps the currently edited file, also
664 when it's deleted from the argument list.
Bram Moolenaarf95dc3b2005-05-22 22:02:25 +0000665 Example: >
666 :argdel *.obj
667< {not in Vi} {not available when compiled without the
Bram Moolenaar071d4272004-06-13 20:20:40 +0000668 |+listcmds| feature}
669
Bram Moolenaared32d942014-12-06 23:33:00 +0100670:[range]argd[elete] Delete the {range} files from the argument list.
671 Example: >
672 :10,$argdel
673< Deletes arguments 10 and further, keeping 1-9. >
674 :$argd
675< Deletes just the last one. >
676 :argd
677 :.argd
678< Deletes the current argument. >
679 :%argd
680< Removes all the files from the arglist.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000681 When the last number in the range is too high, up to
Bram Moolenaared32d942014-12-06 23:33:00 +0100682 the last argument is deleted.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000683 {not in Vi} {not available when compiled without the
684 |+listcmds| feature}
685
686 *:argu* *:argument*
687:[count]argu[ment] [count] [++opt] [+cmd]
688 Edit file [count] in the argument list. When [count]
689 is omitted the current entry is used. This fails
690 when changes have been made and Vim does not want to
691 |abandon| the current buffer.
692 Also see |++opt| and |+cmd|.
693 {not in Vi} {not available when compiled without the
694 |+listcmds| feature}
695
696:[count]argu[ment]! [count] [++opt] [+cmd]
697 Edit file [count] in the argument list, discard any
698 changes to the current buffer. When [count] is
699 omitted the current entry is used.
700 Also see |++opt| and |+cmd|.
701 {not in Vi} {not available when compiled without the
702 |+listcmds| feature}
703
704:[count]n[ext] [++opt] [+cmd] *:n* *:ne* *:next* *E165* *E163*
705 Edit [count] next file. This fails when changes have
706 been made and Vim does not want to |abandon| the
707 current buffer. Also see |++opt| and |+cmd|. {Vi: no
708 count or ++opt}.
709
710:[count]n[ext]! [++opt] [+cmd]
711 Edit [count] next file, discard any changes to the
712 buffer. Also see |++opt| and |+cmd|. {Vi: no count
713 or ++opt}.
714
715:n[ext] [++opt] [+cmd] {arglist} *:next_f*
716 Same as |:args_f|.
717
718:n[ext]! [++opt] [+cmd] {arglist}
719 Same as |:args_f!|.
720
721:[count]N[ext] [count] [++opt] [+cmd] *:Next* *:N* *E164*
722 Edit [count] previous file in argument list. This
723 fails when changes have been made and Vim does not
724 want to |abandon| the current buffer.
725 Also see |++opt| and |+cmd|. {Vi: no count or ++opt}.
726
727:[count]N[ext]! [count] [++opt] [+cmd]
728 Edit [count] previous file in argument list. Discard
729 any changes to the buffer. Also see |++opt| and
730 |+cmd|. {Vi: no count or ++opt}.
731
732:[count]prev[ious] [count] [++opt] [+cmd] *:prev* *:previous*
733 Same as :Next. Also see |++opt| and |+cmd|. {Vi:
734 only in some versions}
735
736 *:rew* *:rewind*
737:rew[ind] [++opt] [+cmd]
738 Start editing the first file in the argument list.
739 This fails when changes have been made and Vim does
740 not want to |abandon| the current buffer.
741 Also see |++opt| and |+cmd|. {Vi: no ++opt}
742
743:rew[ind]! [++opt] [+cmd]
744 Start editing the first file in the argument list.
745 Discard any changes to the buffer. Also see |++opt|
746 and |+cmd|. {Vi: no ++opt}
747
748 *:fir* *:first*
749:fir[st][!] [++opt] [+cmd]
750 Other name for ":rewind". {not in Vi}
751
752 *:la* *:last*
753:la[st] [++opt] [+cmd]
754 Start editing the last file in the argument list.
755 This fails when changes have been made and Vim does
756 not want to |abandon| the current buffer.
757 Also see |++opt| and |+cmd|. {not in Vi}
758
759:la[st]! [++opt] [+cmd]
760 Start editing the last file in the argument list.
761 Discard any changes to the buffer. Also see |++opt|
762 and |+cmd|. {not in Vi}
763
764 *:wn* *:wnext*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000765:[count]wn[ext] [++opt]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000766 Write current file and start editing the [count]
767 next file. Also see |++opt| and |+cmd|. {not in Vi}
768
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000769:[count]wn[ext] [++opt] {file}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000770 Write current file to {file} and start editing the
771 [count] next file, unless {file} already exists and
772 the 'writeany' option is off. Also see |++opt| and
773 |+cmd|. {not in Vi}
774
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000775:[count]wn[ext]! [++opt] {file}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000776 Write current file to {file} and start editing the
777 [count] next file. Also see |++opt| and |+cmd|. {not
778 in Vi}
779
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000780:[count]wN[ext][!] [++opt] [file] *:wN* *:wNext*
781:[count]wp[revious][!] [++opt] [file] *:wp* *:wprevious*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000782 Same as :wnext, but go to previous file instead of
783 next. {not in Vi}
784
785The [count] in the commands above defaults to one. For some commands it is
786possible to use two counts. The last one (rightmost one) is used.
787
788If no [+cmd] argument is present, the cursor is positioned at the last known
789cursor position for the file. If 'startofline' is set, the cursor will be
790positioned at the first non-blank in the line, otherwise the last know column
791is used. If there is no last known cursor position the cursor will be in the
792first line (the last line in Ex mode).
793
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000794 *{arglist}*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000795The wildcards in the argument list are expanded and the file names are sorted.
796Thus you can use the command "vim *.c" to edit all the C files. From within
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000797Vim the command ":n *.c" does the same.
798
799White space is used to separate file names. Put a backslash before a space or
Bram Moolenaar9e368db2007-05-12 13:25:01 +0000800tab to include it in a file name. E.g., to edit the single file "foo bar": >
Bram Moolenaar1cd871b2004-12-19 22:46:22 +0000801 :next foo\ bar
802
803On Unix and a few other systems you can also use backticks, for example: >
804 :next `find . -name \\*.c -print`
Bram Moolenaar071d4272004-06-13 20:20:40 +0000805The backslashes before the star are required to prevent "*.c" to be expanded
806by the shell before executing the find program.
807
808 *arglist-position*
809When there is an argument list you can see which file you are editing in the
810title of the window (if there is one and 'title' is on) and with the file
811message you get with the "CTRL-G" command. You will see something like
812 (file 4 of 11)
813If 'shortmess' contains 'f' it will be
814 (4 of 11)
815If you are not really editing the file at the current position in the argument
816list it will be
817 (file (4) of 11)
818This means that you are position 4 in the argument list, but not editing the
819fourth file in the argument list. This happens when you do ":e file".
820
821
822LOCAL ARGUMENT LIST
823
824{not in Vi}
Bram Moolenaardb84e452010-08-15 13:50:43 +0200825{not available when compiled without the |+windows| or |+listcmds| features}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000826
827 *:arglocal*
828:argl[ocal] Make a local copy of the global argument list.
829 Doesn't start editing another file.
830
831:argl[ocal][!] [++opt] [+cmd] {arglist}
832 Define a new argument list, which is local to the
833 current window. Works like |:args_f| otherwise.
834
835 *:argglobal*
836:argg[lobal] Use the global argument list for the current window.
837 Doesn't start editing another file.
838
839:argg[lobal][!] [++opt] [+cmd] {arglist}
840 Use the global argument list for the current window.
841 Define a new global argument list like |:args_f|.
842 All windows using the global argument list will see
843 this new list.
844
845There can be several argument lists. They can be shared between windows.
846When they are shared, changing the argument list in one window will also
847change it in the other window.
848
849When a window is split the new window inherits the argument list from the
850current window. The two windows then share this list, until one of them uses
851|:arglocal| or |:argglobal| to use another argument list.
852
853
854USING THE ARGUMENT LIST
855
856 *:argdo*
Bram Moolenaara162bc52015-01-07 16:54:21 +0100857:[range]argdo[!] {cmd} Execute {cmd} for each file in the argument list or
858 if [range] is specified only for arguments in that
859 range. It works like doing this: >
Bram Moolenaar071d4272004-06-13 20:20:40 +0000860 :rewind
861 :{cmd}
862 :next
863 :{cmd}
864 etc.
865< When the current file can't be |abandon|ed and the [!]
866 is not present, the command fails.
867 When an error is detected on one file, further files
868 in the argument list will not be visited.
869 The last file in the argument list (or where an error
870 occurred) becomes the current file.
871 {cmd} can contain '|' to concatenate several commands.
872 {cmd} must not change the argument list.
873 Note: While this command is executing, the Syntax
874 autocommand event is disabled by adding it to
875 'eventignore'. This considerably speeds up editing
876 each file.
877 {not in Vi} {not available when compiled without the
878 |+listcmds| feature}
Bram Moolenaaraa23b372015-09-08 18:46:31 +0200879 Also see |:windo|, |:tabdo|, |:bufdo|, |:cdo|, |:ldo|,
880 |:cfdo| and |:lfdo|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000881
882Example: >
883 :args *.c
884 :argdo set ff=unix | update
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100885This sets the 'fileformat' option to "unix" and writes the file if it is now
Bram Moolenaar071d4272004-06-13 20:20:40 +0000886changed. This is done for all *.c files.
887
888Example: >
889 :args *.[ch]
890 :argdo %s/\<my_foo\>/My_Foo/ge | update
891This changes the word "my_foo" to "My_Foo" in all *.c and *.h files. The "e"
892flag is used for the ":substitute" command to avoid an error for files where
893"my_foo" isn't used. ":update" writes the file only if changes were made.
894
895==============================================================================
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00008964. Writing *writing* *save-file*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000897
898Note: When the 'write' option is off, you are not able to write any file.
899
900 *:w* *:write*
901 *E502* *E503* *E504* *E505*
Bram Moolenaar9964e462007-05-05 17:54:07 +0000902 *E512* *E514* *E667* *E796*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000903:w[rite] [++opt] Write the whole buffer to the current file. This is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000904 the normal way to save changes to a file. It fails
905 when the 'readonly' option is set or when there is
906 another reason why the file can't be written.
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000907 For ++opt see |++opt|, but only ++bin, ++nobin, ++ff
908 and ++enc are effective.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000909
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000910:w[rite]! [++opt] Like ":write", but forcefully write when 'readonly' is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000911 set or there is another reason why writing was
912 refused.
913 Note: This may change the permission and ownership of
914 the file and break (symbolic) links. Add the 'W' flag
915 to 'cpoptions' to avoid this.
916
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000917:[range]w[rite][!] [++opt]
918 Write the specified lines to the current file. This
Bram Moolenaar071d4272004-06-13 20:20:40 +0000919 is unusual, because the file will not contain all
920 lines in the buffer.
921
922 *:w_f* *:write_f*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000923:[range]w[rite] [++opt] {file}
924 Write the specified lines to {file}, unless it
Bram Moolenaar071d4272004-06-13 20:20:40 +0000925 already exists and the 'writeany' option is off.
926
927 *:w!*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000928:[range]w[rite]! [++opt] {file}
929 Write the specified lines to {file}. Overwrite an
Bram Moolenaar071d4272004-06-13 20:20:40 +0000930 existing file.
931
932 *:w_a* *:write_a* *E494*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000933:[range]w[rite][!] [++opt] >>
934 Append the specified lines to the current file.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000935
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000936:[range]w[rite][!] [++opt] >> {file}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000937 Append the specified lines to {file}. '!' forces the
938 write even if file does not exist.
939
940 *:w_c* *:write_c*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000941:[range]w[rite] [++opt] !{cmd}
942 Execute {cmd} with [range] lines as standard input
Bram Moolenaar071d4272004-06-13 20:20:40 +0000943 (note the space in front of the '!'). {cmd} is
944 executed like with ":!{cmd}", any '!' is replaced with
945 the previous command |:!|.
946
Bram Moolenaar5c4e21c2004-10-12 19:54:52 +0000947The default [range] for the ":w" command is the whole buffer (1,$). If you
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000948write the whole buffer, it is no longer considered changed. When you
949write it to a different file with ":w somefile" it depends on the "+" flag in
950'cpoptions'. When included, the write command will reset the 'modified' flag,
951even though the buffer itself may still be different from its file.
Bram Moolenaar5c4e21c2004-10-12 19:54:52 +0000952
Bram Moolenaar071d4272004-06-13 20:20:40 +0000953If a file name is given with ":w" it becomes the alternate file. This can be
954used, for example, when the write fails and you want to try again later with
955":w #". This can be switched off by removing the 'A' flag from the
956'cpoptions' option.
957
958 *:sav* *:saveas*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000959:sav[eas][!] [++opt] {file}
960 Save the current buffer under the name {file} and set
Bram Moolenaar071d4272004-06-13 20:20:40 +0000961 the filename of the current buffer to {file}. The
962 previous name is used for the alternate file name.
963 The [!] is needed to overwrite an existing file.
Bram Moolenaar2d3f4892006-01-20 23:02:51 +0000964 When 'filetype' is empty filetype detection is done
965 with the new name, before the file is written.
Bram Moolenaar910f66f2006-04-05 20:41:53 +0000966 When the write was successful 'readonly' is reset.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000967 {not in Vi}
968
969 *:up* *:update*
Bram Moolenaared39e1d2008-08-09 17:55:22 +0000970:[range]up[date][!] [++opt] [>>] [file]
Bram Moolenaar071d4272004-06-13 20:20:40 +0000971 Like ":write", but only write when the buffer has been
972 modified. {not in Vi}
973
974
975WRITING WITH MULTIPLE BUFFERS *buffer-write*
976
977 *:wa* *:wall*
978:wa[ll] Write all changed buffers. Buffers without a file
979 name or which are readonly are not written. {not in
980 Vi}
981
982:wa[ll]! Write all changed buffers, even the ones that are
983 readonly. Buffers without a file name are not
984 written. {not in Vi}
985
986
987Vim will warn you if you try to overwrite a file that has been changed
988elsewhere. See |timestamp|.
989
990 *backup* *E207* *E506* *E507* *E508* *E509* *E510*
991If you write to an existing file (but do not append) while the 'backup',
992'writebackup' or 'patchmode' option is on, a backup of the original file is
993made. The file is either copied or renamed (see 'backupcopy'). After the
994file has been successfully written and when the 'writebackup' option is on and
995the 'backup' option is off, the backup file is deleted. When the 'patchmode'
996option is on the backup file may be renamed.
997
998 *backup-table*
999'backup' 'writebackup' action ~
1000 off off no backup made
1001 off on backup current file, deleted afterwards (default)
1002 on off delete old backup, backup current file
1003 on on delete old backup, backup current file
1004
1005When the 'backupskip' pattern matches with the name of the file which is
1006written, no backup file is made. The values of 'backup' and 'writebackup' are
1007ignored then.
1008
1009When the 'backup' option is on, an old backup file (with the same name as the
1010new backup file) will be deleted. If 'backup' is not set, but 'writebackup'
1011is set, an existing backup file will not be deleted. The backup file that is
1012made while the file is being written will have a different name.
1013
1014On some filesystems it's possible that in a crash you lose both the backup and
1015the newly written file (it might be there but contain bogus data). In that
1016case try recovery, because the swap file is synced to disk and might still be
1017there. |:recover|
1018
Bram Moolenaare0fa3742016-02-20 15:47:01 +01001019The directories given with the 'backupdir' option are used to put the backup
Bram Moolenaar071d4272004-06-13 20:20:40 +00001020file in. (default: same directory as the written file).
1021
1022Whether the backup is a new file, which is a copy of the original file, or the
1023original file renamed depends on the 'backupcopy' option. See there for an
1024explanation of when the copy is made and when the file is renamed.
1025
1026If the creation of a backup file fails, the write is not done. If you want
1027to write anyway add a '!' to the command.
1028
Bram Moolenaard58e9292011-02-09 17:07:58 +01001029 *write-permissions*
1030When writing a new file the permissions are read-write. For unix the mask is
10310666 with additionally umask applied. When writing a file that was read Vim
1032will preserve the permissions, but clear the s-bit.
1033
Bram Moolenaar071d4272004-06-13 20:20:40 +00001034 *write-readonly*
1035When the 'cpoptions' option contains 'W', Vim will refuse to overwrite a
1036readonly file. When 'W' is not present, ":w!" will overwrite a readonly file,
1037if the system allows it (the directory must be writable).
1038
1039 *write-fail*
1040If the writing of the new file fails, you have to be careful not to lose
1041your changes AND the original file. If there is no backup file and writing
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001042the new file failed, you have already lost the original file! DON'T EXIT VIM
1043UNTIL YOU WRITE OUT THE FILE! If a backup was made, it is put back in place
Bram Moolenaar071d4272004-06-13 20:20:40 +00001044of the original file (if possible). If you exit Vim, and lose the changes
1045you made, the original file will mostly still be there. If putting back the
1046original file fails, there will be an error message telling you that you
1047lost the original file.
1048
1049 *DOS-format-write*
1050If the 'fileformat' is "dos", <CR> <NL> is used for <EOL>. This is default
1051for MS-DOS, Win32 and OS/2. On other systems the message "[dos format]" is
1052shown to remind you that an unusual <EOL> was used.
1053 *Unix-format-write*
1054If the 'fileformat' is "unix", <NL> is used for <EOL>. On MS-DOS, Win32 and
1055OS/2 the message "[unix format]" is shown.
1056 *Mac-format-write*
1057If the 'fileformat' is "mac", <CR> is used for <EOL>. On non-Mac systems the
1058message "[mac format]" is shown.
1059
1060See also |file-formats| and the 'fileformat' and 'fileformats' options.
1061
1062 *ACL*
1063ACL stands for Access Control List. It is an advanced way to control access
1064rights for a file. It is used on new MS-Windows and Unix systems, but only
1065when the filesystem supports it.
1066 Vim attempts to preserve the ACL info when writing a file. The backup file
1067will get the ACL info of the original file.
1068 The ACL info is also used to check if a file is read-only (when opening the
1069file).
1070
1071 *read-only-share*
1072When MS-Windows shares a drive on the network it can be marked as read-only.
1073This means that even if the file read-only attribute is absent, and the ACL
1074settings on NT network shared drives allow writing to the file, you can still
1075not write to the file. Vim on Win32 platforms will detect read-only network
1076drives and will mark the file as read-only. You will not be able to override
1077it with |:write|.
1078
1079 *write-device*
1080When the file name is actually a device name, Vim will not make a backup (that
1081would be impossible). You need to use "!", since the device already exists.
1082Example for Unix: >
1083 :w! /dev/lpt0
1084and for MS-DOS or MS-Windows: >
1085 :w! lpt0
1086For Unix a device is detected when the name doesn't refer to a normal file or
1087a directory. A fifo or named pipe also looks like a device to Vim.
1088For MS-DOS and MS-Windows the device is detected by its name:
1089 AUX
1090 CON
1091 CLOCK$
1092 NUL
1093 PRN
1094 COMn n=1,2,3... etc
1095 LPTn n=1,2,3... etc
1096The names can be in upper- or lowercase.
1097
1098==============================================================================
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000010995. Writing and quitting *write-quit*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001100
1101 *:q* *:quit*
1102:q[uit] Quit the current window. Quit Vim if this is the last
1103 window. This fails when changes have been made and
1104 Vim refuses to |abandon| the current buffer, and when
1105 the last file in the argument list has not been
1106 edited.
Bram Moolenaar7e8fd632006-02-18 22:14:51 +00001107 If there are other tab pages and quitting the last
1108 window in the current tab page the current tab page is
1109 closed |tab-page|.
Bram Moolenaar30b65812012-07-12 22:01:11 +02001110 Triggers the |QuitPre| autocommand event.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001111
1112:conf[irm] q[uit] Quit, but give prompt when changes have been made, or
1113 the last file in the argument list has not been
1114 edited. See |:confirm| and 'confirm'. {not in Vi}
1115
Bram Moolenaarfa735342016-01-03 22:14:44 +01001116:q[uit]! Quit without writing, also when the current buffer has
Bram Moolenaar09521312016-08-12 22:54:35 +02001117 changes. The buffer is unloaded, also when it has
1118 'hidden' set.
1119 If this is the last window and there is a modified
1120 hidden buffer, the current buffer is abandoned and the
1121 first changed hidden buffer becomes the current
1122 buffer.
Bram Moolenaar2f3b5102014-11-19 18:54:17 +01001123 Use ":qall!" to exit always.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001124
1125:cq[uit] Quit always, without writing, and return an error
1126 code. See |:cq|. Used for Manx's QuickFix mode (see
1127 |quickfix|). {not in Vi}
1128
1129 *:wq*
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001130:wq [++opt] Write the current file and quit. Writing fails when
Bram Moolenaar071d4272004-06-13 20:20:40 +00001131 the file is read-only or the buffer does not have a
1132 name. Quitting fails when the last file in the
1133 argument list has not been edited.
1134
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001135:wq! [++opt] Write the current file and quit. Writing fails when
Bram Moolenaar071d4272004-06-13 20:20:40 +00001136 the current buffer does not have a name.
1137
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001138:wq [++opt] {file} Write to {file} and quit. Quitting fails when the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139 last file in the argument list has not been edited.
1140
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001141:wq! [++opt] {file} Write to {file} and quit.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001142
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001143:[range]wq[!] [++opt] [file]
1144 Same as above, but only write the lines in [range].
Bram Moolenaar071d4272004-06-13 20:20:40 +00001145
1146 *:x* *:xit*
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001147:[range]x[it][!] [++opt] [file]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001148 Like ":wq", but write only when changes have been
1149 made.
1150 When 'hidden' is set and there are more windows, the
1151 current buffer becomes hidden, after writing the file.
1152
1153 *:exi* *:exit*
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001154:[range]exi[t][!] [++opt] [file]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 Same as :xit.
1156
1157 *ZZ*
1158ZZ Write current file, if modified, and quit (same as
1159 ":x"). (Note: If there are several windows for the
1160 current file, the file is written if it was modified
1161 and the window is closed).
1162
1163 *ZQ*
1164ZQ Quit without checking for changes (same as ":q!").
1165 {not in Vi}
1166
1167MULTIPLE WINDOWS AND BUFFERS *window-exit*
1168
1169 *:qa* *:qall*
1170:qa[ll] Exit Vim, unless there are some buffers which have been
1171 changed. (Use ":bmod" to go to the next modified buffer).
1172 When 'autowriteall' is set all changed buffers will be
1173 written, like |:wqall|. {not in Vi}
1174
1175:conf[irm] qa[ll]
1176 Exit Vim. Bring up a prompt when some buffers have been
1177 changed. See |:confirm|. {not in Vi}
1178
1179:qa[ll]! Exit Vim. Any changes to buffers are lost. {not in Vi}
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001180 Also see |:cquit|, it does the same but exits with a non-zero
1181 value.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001182
1183 *:quita* *:quitall*
1184:quita[ll][!] Same as ":qall". {not in Vi}
1185
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001186:wqa[ll] [++opt] *:wqa* *:wqall* *:xa* *:xall*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001187:xa[ll] Write all changed buffers and exit Vim. If there are buffers
1188 without a file name, which are readonly or which cannot be
1189 written for another reason, Vim will not quit. {not in Vi}
1190
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001191:conf[irm] wqa[ll] [++opt]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001192:conf[irm] xa[ll]
1193 Write all changed buffers and exit Vim. Bring up a prompt
1194 when some buffers are readonly or cannot be written for
1195 another reason. See |:confirm|. {not in Vi}
1196
Bram Moolenaared39e1d2008-08-09 17:55:22 +00001197:wqa[ll]! [++opt]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001198:xa[ll]! Write all changed buffers, even the ones that are readonly,
1199 and exit Vim. If there are buffers without a file name or
1200 which cannot be written for another reason, Vim will not quit.
1201 {not in Vi}
1202
1203==============================================================================
Bram Moolenaar1cd871b2004-12-19 22:46:22 +000012046. Dialogs *edit-dialogs*
1205
1206 *:confirm* *:conf*
1207:conf[irm] {command} Execute {command}, and use a dialog when an
1208 operation has to be confirmed. Can be used on the
Bram Moolenaar61d35bd2012-03-28 20:51:51 +02001209 |:q|, |:qa| and |:w| commands (the latter to override
1210 a read-only setting), and any other command that can
1211 fail in such a way, such as |:only|, |:buffer|,
1212 |:bdelete|, etc.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001213
1214Examples: >
1215 :confirm w foo
1216< Will ask for confirmation when "foo" already exists. >
1217 :confirm q
1218< Will ask for confirmation when there are changes. >
1219 :confirm qa
1220< If any modified, unsaved buffers exist, you will be prompted to save
1221 or abandon each one. There are also choices to "save all" or "abandon
1222 all".
1223
1224If you want to always use ":confirm", set the 'confirm' option.
1225
Bram Moolenaaraa3b15d2016-04-21 08:53:19 +02001226 *:browse* *:bro* *E338* *E614* *E615* *E616*
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001227:bro[wse] {command} Open a file selection dialog for an argument to
1228 {command}. At present this works for |:e|, |:w|,
Bram Moolenaar9028b102010-07-11 16:58:51 +02001229 |:wall|, |:wq|, |:wqall|, |:x|, |:xall|, |:exit|,
1230 |:view|, |:sview|, |:r|, |:saveas|, |:sp|, |:mkexrc|,
1231 |:mkvimrc|, |:mksession|, |:mkview|, |:split|,
1232 |:vsplit|, |:tabe|, |:tabnew|, |:cfile|, |:cgetfile|,
1233 |:caddfile|, |:lfile|, |:lgetfile|, |:laddfile|,
1234 |:diffsplit|, |:diffpatch|, |:open|, |:pedit|,
1235 |:redir|, |:source|, |:update|, |:visual|, |:vsplit|,
1236 and |:qall| if 'confirm' is set.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001237 {only in Win32, Athena, Motif, GTK and Mac GUI}
1238 When ":browse" is not possible you get an error
1239 message. If the |+browse| feature is missing or the
1240 {command} doesn't support browsing, the {command} is
1241 executed without a dialog.
1242 ":browse set" works like |:options|.
Bram Moolenaar9028b102010-07-11 16:58:51 +02001243 See also |:oldfiles| for ":browse oldfiles".
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001244
1245The syntax is best shown via some examples: >
1246 :browse e $vim/foo
1247< Open the browser in the $vim/foo directory, and edit the
1248 file chosen. >
1249 :browse e
1250< Open the browser in the directory specified with 'browsedir',
1251 and edit the file chosen. >
1252 :browse w
1253< Open the browser in the directory of the current buffer,
1254 with the current buffer filename as default, and save the
1255 buffer under the filename chosen. >
1256 :browse w C:/bar
1257< Open the browser in the C:/bar directory, with the current
1258 buffer filename as default, and save the buffer under the
1259 filename chosen.
1260Also see the |'browsedir'| option.
1261For versions of Vim where browsing is not supported, the command is executed
1262unmodified.
1263
1264 *browsefilter*
Bram Moolenaar30b65812012-07-12 22:01:11 +02001265For MS Windows and GTK, you can modify the filters that are used in the browse
1266dialog. By setting the g:browsefilter or b:browsefilter variables, you can
1267change the filters globally or locally to the buffer. The variable is set to
1268a string in the format "{filter label}\t{pattern};{pattern}\n" where {filter
1269label} is the text that appears in the "Files of Type" comboBox, and {pattern}
1270is the pattern which filters the filenames. Several patterns can be given,
1271separated by ';'.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001272
1273For Motif the same format is used, but only the very first pattern is actually
1274used (Motif only offers one pattern, but you can edit it).
1275
1276For example, to have only Vim files in the dialog, you could use the following
1277command: >
1278
Bram Moolenaar30b65812012-07-12 22:01:11 +02001279 let g:browsefilter = "Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001280
1281You can override the filter setting on a per-buffer basis by setting the
1282b:browsefilter variable. You would most likely set b:browsefilter in a
1283filetype plugin, so that the browse dialog would contain entries related to
1284the type of file you are currently editing. Disadvantage: This makes it
1285difficult to start editing a file of a different type. To overcome this, you
1286may want to add "All Files\t*.*\n" as the final filter, so that the user can
1287still access any desired file.
1288
Bram Moolenaar30b65812012-07-12 22:01:11 +02001289To avoid setting browsefilter when Vim does not actually support it, you can
1290use has("browsefilter"): >
1291
1292 if has("browsefilter")
1293 let g:browsefilter = "whatever"
1294 endif
1295
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001296==============================================================================
12977. The current directory *current-directory*
1298
1299You may use the |:cd| and |:lcd| commands to change to another directory, so
1300you will not have to type that directory name in front of the file names. It
1301also makes a difference for executing external commands, e.g. ":!ls".
1302
Bram Moolenaardf177f62005-02-22 08:39:57 +00001303Changing directory fails when the current buffer is modified, the '.' flag is
1304present in 'cpoptions' and "!" is not used in the command.
1305
Bram Moolenaara93fa7e2006-04-17 22:14:47 +00001306 *:cd* *E747* *E472*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001307:cd[!] On non-Unix systems: Print the current directory
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001308 name. On Unix systems: Change the current directory
1309 to the home directory. Use |:pwd| to print the
1310 current directory on all systems.
1311
Bram Moolenaardf177f62005-02-22 08:39:57 +00001312:cd[!] {path} Change the current directory to {path}.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001313 If {path} is relative, it is searched for in the
1314 directories listed in |'cdpath'|.
1315 Does not change the meaning of an already opened file,
1316 because its full path name is remembered. Files from
1317 the |arglist| may change though!
1318 On MS-DOS this also changes the active drive.
1319 To change to the directory of the current file: >
1320 :cd %:h
1321<
1322 *:cd-* *E186*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001323:cd[!] - Change to the previous current directory (before the
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001324 previous ":cd {path}" command). {not in Vi}
1325
1326 *:chd* *:chdir*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001327:chd[ir][!] [path] Same as |:cd|.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001328
1329 *:lc* *:lcd*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001330:lc[d][!] {path} Like |:cd|, but only set the current directory for the
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001331 current window. The current directory for other
1332 windows is not changed. {not in Vi}
1333
1334 *:lch* *:lchdir*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001335:lch[dir][!] Same as |:lcd|. {not in Vi}
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001336
1337 *:pw* *:pwd* *E187*
1338:pw[d] Print the current directory name. {Vi: no pwd}
1339 Also see |getcwd()|.
1340
1341So long as no |:lcd| command has been used, all windows share the same current
1342directory. Using a command to jump to another window doesn't change anything
1343for the current directory.
1344When a |:lcd| command has been used for a window, the specified directory
1345becomes the current directory for that window. Windows where the |:lcd|
1346command has not been used stick to the global current directory. When jumping
1347to another window the current directory will become the last specified local
1348current directory. If none was specified, the global current directory is
1349used.
1350When a |:cd| command is used, the current window will lose his local current
1351directory and will use the global current directory from now on.
1352
1353After using |:cd| the full path name will be used for reading and writing
1354files. On some networked file systems this may cause problems. The result of
1355using the full path name is that the file names currently in use will remain
1356referring to the same file. Example: If you have a file a:test and a
1357directory a:vim the commands ":e test" ":cd vim" ":w" will overwrite the file
1358a:test and not write a:vim/test. But if you do ":w test" the file a:vim/test
1359will be written, because you gave a new file name and did not refer to a
1360filename before the ":cd".
1361
1362==============================================================================
Bram Moolenaar071d4272004-06-13 20:20:40 +000013638. Editing binary files *edit-binary*
1364
1365Although Vim was made to edit text files, it is possible to edit binary
1366files. The |-b| Vim argument (b for binary) makes Vim do file I/O in binary
1367mode, and sets some options for editing binary files ('binary' on, 'textwidth'
1368to 0, 'modeline' off, 'expandtab' off). Setting the 'binary' option has the
1369same effect. Don't forget to do this before reading the file.
1370
1371There are a few things to remember when editing binary files:
1372- When editing executable files the number of characters must not change.
1373 Use only the "R" or "r" command to change text. Do not delete characters
1374 with "x" or by backspacing.
1375- Set the 'textwidth' option to 0. Otherwise lines will unexpectedly be
1376 split in two.
1377- When there are not many <EOL>s, the lines will become very long. If you
1378 want to edit a line that does not fit on the screen reset the 'wrap' option.
1379 Horizontal scrolling is used then. If a line becomes too long (more than
1380 about 32767 characters on the Amiga, much more on 32-bit systems, see
1381 |limits|) you cannot edit that line. The line will be split when reading
1382 the file. It is also possible that you get an "out of memory" error when
1383 reading the file.
1384- Make sure the 'binary' option is set BEFORE loading the
1385 file. Otherwise both <CR> <NL> and <NL> are considered to end a line
1386 and when the file is written the <NL> will be replaced with <CR> <NL>.
1387- <Nul> characters are shown on the screen as ^@. You can enter them with
1388 "CTRL-V CTRL-@" or "CTRL-V 000" {Vi cannot handle <Nul> characters in the
1389 file}
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +02001390- To insert a <NL> character in the file split a line. When writing the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001391 buffer to a file a <NL> will be written for the <EOL>.
1392- Vim normally appends an <EOL> at the end of the file if there is none.
1393 Setting the 'binary' option prevents this. If you want to add the final
1394 <EOL>, set the 'endofline' option. You can also read the value of this
1395 option to see if there was an <EOL> for the last line (you cannot see this
1396 in the text).
1397
1398==============================================================================
13999. Encryption *encryption*
1400
1401Vim is able to write files encrypted, and read them back. The encrypted text
1402cannot be read without the right key.
Bram Moolenaar996343d2010-07-04 22:20:21 +02001403{only available when compiled with the |+cryptv| feature} *E833*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001404
Bram Moolenaar81af9252010-12-10 20:35:50 +01001405The text in the swap file and the undo file is also encrypted. *E843*
Bram Moolenaar07d87792014-07-19 14:04:47 +02001406However, this is done block-by-block and may reduce the time needed to crack a
1407password. You can disable the swap file, but then a crash will cause you to
1408lose your work. The undo file can be disabled without much disadvantage. >
1409 :set noundofile
1410 :noswapfile edit secrets
Bram Moolenaara8ffcbb2010-06-21 06:15:46 +02001411
1412Note: The text in memory is not encrypted. A system administrator may be able
1413to see your text while you are editing it. When filtering text with
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001414":!filter" or using ":w !command" the text is also not encrypted, this may
1415reveal it to others. The 'viminfo' file is not encrypted.
1416
1417You could do this to edit very secret text: >
1418 :set noundofile viminfo=
1419 :noswapfile edit secrets.txt
Bram Moolenaar88774fd2015-08-25 19:52:04 +02001420Keep in mind that without a swap file you risk losing your work in the event
Bram Moolenaarfc39ecf2015-08-11 20:34:49 +02001421of a crash or a power failure.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001422
1423WARNING: If you make a typo when entering the key and then write the file and
1424exit, the text will be lost!
1425
1426The normal way to work with encryption, is to use the ":X" command, which will
1427ask you to enter a key. A following write command will use that key to
1428encrypt the file. If you later edit the same file, Vim will ask you to enter
1429a key. If you type the same key as that was used for writing, the text will
1430be readable again. If you use a wrong key, it will be a mess.
1431
1432 *:X*
1433:X Prompt for an encryption key. The typing is done without showing the
1434 actual text, so that someone looking at the display won't see it.
1435 The typed key is stored in the 'key' option, which is used to encrypt
1436 the file when it is written. The file will remain unchanged until you
1437 write it. See also |-x|.
1438
1439The value of the 'key' options is used when text is written. When the option
1440is not empty, the written file will be encrypted, using the value as the
1441encryption key. A magic number is prepended, so that Vim can recognize that
1442the file is encrypted.
1443
1444To disable the encryption, reset the 'key' option to an empty value: >
1445 :set key=
1446
Bram Moolenaar49771f42010-07-20 17:32:38 +02001447You can use the 'cryptmethod' option to select the type of encryption, use one
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001448of these: >
1449 :setlocal cm=zip " weak method, backwards compatible
1450 :setlocal cm=blowfish " method with flaws
1451 :setlocal cm=blowfish2 " medium strong method
1452
Bram Moolenaar49771f42010-07-20 17:32:38 +02001453Do this before writing the file. When reading an encrypted file it will be
1454set automatically to the method used when that file was written. You can
1455change 'cryptmethod' before writing that file to change the method.
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001456
Bram Moolenaarc2299672014-11-13 14:25:38 +01001457To set the default method, used for new files, use this in your |vimrc|
1458file: >
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001459 set cm=blowfish2
Bram Moolenaarc2299672014-11-13 14:25:38 +01001460Using "blowfish2" is highly recommended. Only use another method if you
1461must use an older Vim version that does not support it.
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001462
Bram Moolenaar662db672011-03-22 14:05:35 +01001463The message given for reading and writing a file will show "[crypted]" when
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001464using zip, "[blowfish]" when using blowfish, etc.
Bram Moolenaar40e6a712010-05-16 22:32:54 +02001465
Bram Moolenaara3ff49f2010-05-30 22:48:02 +02001466When writing an undo file, the same key and method will be used for the text
1467in the undo file. |persistent-undo|.
1468
Bram Moolenaar85084ef2016-01-17 22:26:33 +01001469To test for blowfish support you can use these conditions: >
1470 has('crypt-blowfish')
1471 has('crypt-blowfish2')
1472This works since Vim 7.4.1099 while blowfish support was added earlier.
1473Thus the condition failing doesn't mean blowfish is not supported. You can
1474test for blowfish with: >
1475 v:version >= 703
1476And for blowfish2 with: >
1477 v:version > 704 || (v:version == 704 && has('patch401'))
Bram Moolenaar5e9b2fa2016-02-01 22:37:05 +01001478If you are sure Vim includes patch 7.4.237 a simpler check is: >
1479 has('patch-7.4.401')
Bram Moolenaar85084ef2016-01-17 22:26:33 +01001480<
Bram Moolenaarfa7584c2010-05-19 21:57:45 +02001481 *E817* *E818* *E819* *E820*
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02001482When encryption does not work properly, you would be able to write your text
1483to a file and never be able to read it back. Therefore a test is performed to
1484check if the encryption works as expected. If you get one of these errors
1485don't write the file encrypted! You need to rebuild the Vim binary to fix
1486this.
1487
Bram Moolenaar46f9d492010-06-12 20:18:19 +02001488*E831* This is an internal error, "cannot happen". If you can reproduce it,
Bram Moolenaar56be9502010-06-06 14:20:26 +02001489please report to the developers.
1490
Bram Moolenaar0bbabe82010-05-17 20:32:55 +02001491When reading a file that has been encrypted and the 'key' option is not empty,
1492it will be used for decryption. If the value is empty, you will be prompted
1493to enter the key. If you don't enter a key, or you enter the wrong key, the
1494file is edited without being decrypted. There is no warning about using the
1495wrong key (this makes brute force methods to find the key more difficult).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001496
1497If want to start reading a file that uses a different key, set the 'key'
1498option to an empty string, so that Vim will prompt for a new one. Don't use
1499the ":set" command to enter the value, other people can read the command over
1500your shoulder.
1501
1502Since the value of the 'key' option is supposed to be a secret, its value can
1503never be viewed. You should not set this option in a vimrc file.
1504
Bram Moolenaar60aad972010-07-21 20:36:22 +02001505An encrypted file can be recognized by the "file" command, if you add these
1506lines to "/etc/magic", "/usr/share/misc/magic" or wherever your system has the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001507"magic" file: >
1508 0 string VimCrypt~ Vim encrypted file
Bram Moolenaarc095b282010-07-20 22:33:34 +02001509 >9 string 01 - "zip" cryptmethod
1510 >9 string 02 - "blowfish" cryptmethod
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001511 >9 string 03 - "blowfish2" cryptmethod
Bram Moolenaar071d4272004-06-13 20:20:40 +00001512
1513Notes:
1514- Encryption is not possible when doing conversion with 'charconvert'.
1515- Text you copy or delete goes to the numbered registers. The registers can
1516 be saved in the .viminfo file, where they could be read. Change your
1517 'viminfo' option to be safe.
1518- Someone can type commands in Vim when you walk away for a moment, he should
1519 not be able to get the key.
1520- If you make a typing mistake when entering the key, you might not be able to
1521 get your text back!
1522- If you type the key with a ":set key=value" command, it can be kept in the
1523 history, showing the 'key' value in a viminfo file.
1524- There is never 100% safety. The encryption in Vim has not been tested for
1525 robustness.
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +02001526- The algorithm used for 'cryptmethod' "zip" is breakable. A 4 character key
1527 in about one hour, a 6 character key in one day (on a Pentium 133 PC). This
1528 requires that you know some text that must appear in the file. An expert
1529 can break it for any key. When the text has been decrypted, this also means
1530 that the key can be revealed, and other files encrypted with the same key
1531 can be decrypted.
1532- Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
1533 objection to its export. Pkzip's public file APPNOTE.TXT describes this
1534 algorithm in detail.
Bram Moolenaar3a991dd2014-10-02 01:41:41 +02001535- The implementation of 'cryptmethod' "blowfish" has a flaw. It is possible
1536 to crack the first 64 bytes of a file and in some circumstances more of the
Bram Moolenaar8f4ac012014-08-10 13:38:34 +02001537 file. Use of it is not recommended, but it's still the strongest method
1538 supported by Vim 7.3 and 7.4. The "zip" method is even weaker.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001539- Vim originates from the Netherlands. That is where the sources come from.
1540 Thus the encryption code is not exported from the USA.
1541
1542==============================================================================
154310. Timestamps *timestamp* *timestamps*
1544
Bram Moolenaare968e362014-05-13 20:23:24 +02001545Vim remembers the modification timestamp, mode and size of a file when you
1546begin editing it. This is used to avoid that you have two different versions
1547of the same file (without you knowing this).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001548
Bram Moolenaare968e362014-05-13 20:23:24 +02001549After a shell command is run (|:!cmd| |suspend| |:read!| |K|) timestamps,
1550file modes and file sizes are compared for all buffers in a window. Vim will
1551run any associated |FileChangedShell| autocommands or display a warning for
1552any files that have changed. In the GUI this happens when Vim regains input
1553focus.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001554
1555 *E321* *E462*
1556If you want to automatically reload a file when it has been changed outside of
1557Vim, set the 'autoread' option. This doesn't work at the moment you write the
1558file though, only when the file wasn't changed inside of Vim.
1559
1560Note that if a FileChangedShell autocommand is defined you will not get a
1561warning message or prompt. The autocommand is expected to handle this.
1562
Bram Moolenaar10de2da2005-01-27 14:33:00 +00001563There is no warning for a directory (e.g., with |netrw-browse|). But you do
1564get warned if you started editing a new file and it was created as a directory
1565later.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001566
1567When Vim notices the timestamp of a file has changed, and the file is being
1568edited in a buffer but has not changed, Vim checks if the contents of the file
1569is equal. This is done by reading the file again (into a hidden buffer, which
1570is immediately deleted again) and comparing the text. If the text is equal,
1571you will get no warning.
1572
1573If you don't get warned often enough you can use the following command.
1574
1575 *:checkt* *:checktime*
1576:checkt[ime] Check if any buffers were changed outside of Vim.
1577 This checks and warns you if you would end up with two
1578 versions of a file.
1579 If this is called from an autocommand, a ":global"
1580 command or is not typed the actual check is postponed
1581 until a moment the side effects (reloading the file)
1582 would be harmless.
1583 Each loaded buffer is checked for its associated file
1584 being changed. If the file was changed Vim will take
1585 action. If there are no changes in the buffer and
1586 'autoread' is set, the buffer is reloaded. Otherwise,
1587 you are offered the choice of reloading the file. If
1588 the file was deleted you get an error message.
1589 If the file previously didn't exist you get a warning
1590 if it exists now.
1591 Once a file has been checked the timestamp is reset,
1592 you will not be warned again.
1593
1594:[N]checkt[ime] {filename}
1595:[N]checkt[ime] [N]
1596 Check the timestamp of a specific buffer. The buffer
1597 may be specified by name, number or with a pattern.
1598
1599
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001600 *E813* *E814*
1601Vim will reload the buffer if you chose to. If a window is visible that
1602contains this buffer, the reloading will happen in the context of this window.
1603Otherwise a special window is used, so that most autocommands will work. You
1604can't close this window. A few other restrictions apply. Best is to make
1605sure nothing happens outside of the current buffer. E.g., setting
1606window-local options may end up in the wrong window. Splitting the window,
1607doing something there and closing it should be OK (if there are no side
1608effects from other autocommands). Closing unrelated windows and buffers will
1609get you into trouble.
1610
Bram Moolenaar071d4272004-06-13 20:20:40 +00001611Before writing a file the timestamp is checked. If it has changed, Vim will
1612ask if you really want to overwrite the file:
1613
1614 WARNING: The file has been changed since reading it!!!
1615 Do you really want to write to it (y/n)?
1616
1617If you hit 'y' Vim will continue writing the file. If you hit 'n' the write is
1618aborted. If you used ":wq" or "ZZ" Vim will not exit, you will get another
1619chance to write the file.
1620
1621The message would normally mean that somebody has written to the file after
1622the edit session started. This could be another person, in which case you
1623probably want to check if your changes to the file and the changes from the
1624other person should be merged. Write the file under another name and check for
1625differences (the "diff" program can be used for this).
1626
1627It is also possible that you modified the file yourself, from another edit
1628session or with another command (e.g., a filter command). Then you will know
1629which version of the file you want to keep.
1630
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001631There is one situation where you get the message while there is nothing wrong:
1632On a Win32 system on the day daylight saving time starts. There is something
1633in the Win32 libraries that confuses Vim about the hour time difference. The
1634problem goes away the next day.
1635
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001636==============================================================================
163711. File Searching *file-searching*
1638
1639{not available when compiled without the |+path_extra| feature}
1640
1641The file searching is currently used for the 'path', 'cdpath' and 'tags'
Bram Moolenaarc236c162008-07-13 17:41:49 +00001642options, for |finddir()| and |findfile()|. Other commands use |wildcards|
1643which is slightly different.
Bram Moolenaar9964e462007-05-05 17:54:07 +00001644
1645There are three different types of searching:
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001646
Bram Moolenaar02743632005-07-25 20:42:36 +000016471) Downward search: *starstar*
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001648 Downward search uses the wildcards '*', '**' and possibly others
Bram Moolenaarc236c162008-07-13 17:41:49 +00001649 supported by your operating system. '*' and '**' are handled inside Vim,
1650 so they work on all operating systems. Note that "**" only acts as a
1651 special wildcard when it is at the start of a name.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001652
Bram Moolenaar3577c6f2008-06-24 21:16:56 +00001653 The usage of '*' is quite simple: It matches 0 or more characters. In a
1654 search pattern this would be ".*". Note that the "." is not used for file
1655 searching.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001656
1657 '**' is more sophisticated:
1658 - It ONLY matches directories.
Bram Moolenaarc236c162008-07-13 17:41:49 +00001659 - It matches up to 30 directories deep by default, so you can use it to
1660 search an entire directory tree
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001661 - The maximum number of levels matched can be given by appending a number
1662 to '**'.
1663 Thus '/usr/**2' can match: >
1664 /usr
1665 /usr/include
1666 /usr/include/sys
1667 /usr/include/g++
1668 /usr/lib
1669 /usr/lib/X11
1670 ....
1671< It does NOT match '/usr/include/g++/std' as this would be three
1672 levels.
Bram Moolenaarc236c162008-07-13 17:41:49 +00001673 The allowed number range is 0 ('**0' is removed) to 100
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001674 If the given number is smaller than 0 it defaults to 30, if it's
Bram Moolenaarc236c162008-07-13 17:41:49 +00001675 bigger than 100 then 100 is used. The system also has a limit on the
1676 path length, usually 256 or 1024 bytes.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001677 - '**' can only be at the end of the path or be followed by a path
1678 separator or by a number and a path separator.
1679
1680 You can combine '*' and '**' in any order: >
1681 /usr/**/sys/*
Bram Moolenaarc236c162008-07-13 17:41:49 +00001682 /usr/*tory/sys/**
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001683 /usr/**2/sys/*
1684
16852) Upward search:
1686 Here you can give a directory and then search the directory tree upward for
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001687 a file. You could give stop-directories to limit the upward search. The
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001688 stop-directories are appended to the path (for the 'path' option) or to
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001689 the filename (for the 'tags' option) with a ';'. If you want several
1690 stop-directories separate them with ';'. If you want no stop-directory
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001691 ("search upward till the root directory) just use ';'. >
1692 /usr/include/sys;/usr
1693< will search in: >
1694 /usr/include/sys
1695 /usr/include
1696 /usr
1697<
1698 If you use a relative path the upward search is started in Vim's current
1699 directory or in the directory of the current file (if the relative path
1700 starts with './' and 'd' is not included in 'cpoptions').
1701
1702 If Vim's current path is /u/user_x/work/release and you do >
1703 :set path=include;/u/user_x
1704< and then search for a file with |gf| the file is searched in: >
1705 /u/user_x/work/release/include
1706 /u/user_x/work/include
1707 /u/user_x/include
1708
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000017093) Combined up/downward search:
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001710 If Vim's current path is /u/user_x/work/release and you do >
1711 set path=**;/u/user_x
1712< and then search for a file with |gf| the file is searched in: >
1713 /u/user_x/work/release/**
1714 /u/user_x/work/**
1715 /u/user_x/**
1716<
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001717 BE CAREFUL! This might consume a lot of time, as the search of
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001718 '/u/user_x/**' includes '/u/user_x/work/**' and
1719 '/u/user_x/work/release/**'. So '/u/user_x/work/release/**' is searched
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001720 three times and '/u/user_x/work/**' is searched twice.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001721
1722 In the above example you might want to set path to: >
1723 :set path=**,/u/user_x/**
Bram Moolenaar162bd912010-07-28 22:29:10 +02001724< This searches:
1725 /u/user_x/work/release/** ~
1726 /u/user_x/** ~
1727 This searches the same directories, but in a different order.
Bram Moolenaar1cd871b2004-12-19 22:46:22 +00001728
Bram Moolenaar162bd912010-07-28 22:29:10 +02001729 Note that completion for ":find", ":sfind", and ":tabfind" commands do not
1730 currently work with 'path' items that contain a url or use the double star
Bram Moolenaar5b435d62012-04-05 17:33:26 +02001731 with depth limiter (/usr/**2) or upward search (;) notations.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001732
1733 vim:tw=78:ts=8:ft=help:norl: