blob: f1e08688850de11810a2fbb2153b5e0215564c6f [file] [log] [blame]
Bram Moolenaard9967712006-03-11 21:18:15 +00001*map.txt* For Vim version 7.0aa. Last change: 2006 Mar 11
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7Key mapping, abbreviations and user-defined commands.
8
9This subject is introduced in sections |05.3|, |24.7| and |40.1| of the user
10manual.
11
121. Key mapping |key-mapping|
Bram Moolenaar5b962cf2005-12-12 21:58:40 +000013 1.1 MAP COMMANDS |:map-commands|
14 1.2 Special arguments |:map-arguments|
15 1.3 Mapping and modes |:map-modes|
16 1.4 Listing mappings |map-listing|
17 1.5 Mapping special keys |:map-special-keys|
18 1.6 Special characters |:map-special-chars|
19 1.7 What keys to map |map-which-keys|
20 1.8 Examples |map-examples|
21 1.9 Using mappings |map-typing|
22 1.10 Mapping alt-keys |:map-alt-keys|
23 1.11 Mapping an operator |:map-operator|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000242. Abbreviations |abbreviations|
253. Local mappings and functions |script-local|
264. User-defined commands |user-commands|
27
28==============================================================================
291. Key mapping *key-mapping* *mapping* *macro*
30
31Key mapping is used to change the meaning of typed keys. The most common use
32is to define a sequence commands for a function key. Example: >
33
34 :map <F2> a<C-R>=strftime("%c")<CR><Esc>
35
Bram Moolenaar402d2fe2005-04-15 21:00:38 +000036This appends the current date and time after the cursor (in <> notation |<>|).
Bram Moolenaar071d4272004-06-13 20:20:40 +000037
Bram Moolenaar5b962cf2005-12-12 21:58:40 +000038
391.1 MAP COMMANDS *:map-commands*
40
Bram Moolenaar071d4272004-06-13 20:20:40 +000041There are commands to enter new mappings, remove mappings and list mappings.
42See |map-overview| for the various forms of "map" and their relationships with
43modes.
44
45{lhs} means left-hand-side *{lhs}*
46{rhs} means right-hand-side *{rhs}*
47
Bram Moolenaar06b5db92006-02-10 23:11:56 +000048:map {lhs} {rhs} |mapmode-nvo| *:map*
49:nm[ap] {lhs} {rhs} |mapmode-n| *:nm* *:nmap*
50:vm[ap] {lhs} {rhs} |mapmode-v| *:vm* *:vmap*
51:om[ap] {lhs} {rhs} |mapmode-o| *:om* *:omap*
52:map! {lhs} {rhs} |mapmode-ic| *:map!*
53:im[ap] {lhs} {rhs} |mapmode-i| *:im* *:imap*
54:lm[ap] {lhs} {rhs} |mapmode-l| *:lm* *:lmap*
55:cm[ap] {lhs} {rhs} |mapmode-c| *:cm* *:cmap*
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 Map the key sequence {lhs} to {rhs} for the modes
57 where the map command applies. The result, including
58 {rhs}, is then further scanned for mappings. This
59 allows for nested and recursive use of mappings.
60
61
Bram Moolenaar06b5db92006-02-10 23:11:56 +000062:no[remap] {lhs} {rhs} |mapmode-nvo| *:no* *:noremap*
63:nn[oremap] {lhs} {rhs} |mapmode-n| *:nn* *:nnoremap*
64:vn[oremap] {lhs} {rhs} |mapmode-v| *:vn* *:vnoremap*
65:ono[remap] {lhs} {rhs} |mapmode-o| *:ono* *:onoremap*
66:no[remap]! {lhs} {rhs} |mapmode-ic| *:no!* *:noremap!*
67:ino[remap] {lhs} {rhs} |mapmode-i| *:ino* *:inoremap*
68:ln[oremap] {lhs} {rhs} |mapmode-l| *:ln* *:lnoremap*
69:cno[remap] {lhs} {rhs} |mapmode-c| *:cno* *:cnoremap*
Bram Moolenaar071d4272004-06-13 20:20:40 +000070 Map the key sequence {lhs} to {rhs} for the modes
71 where the map command applies. Disallow mapping of
72 {rhs}, to avoid nested and recursive mappings. Often
73 used to redefine a command. {not in Vi}
74
75
Bram Moolenaar06b5db92006-02-10 23:11:56 +000076:unm[ap] {lhs} |mapmode-nvo| *:unm* *:unmap*
77:nun[map] {lhs} |mapmode-n| *:nun* *:nunmap*
78:vu[nmap] {lhs} |mapmode-v| *:vu* *:vunmap*
79:ou[nmap] {lhs} |mapmode-o| *:ou* *:ounmap*
80:unm[ap]! {lhs} |mapmode-ic| *:unm!* *:unmap!*
81:iu[nmap] {lhs} |mapmode-i| *:iu* *:iunmap*
82:lu[nmap] {lhs} |mapmode-l| *:lu* *:lunmap*
83:cu[nmap] {lhs} |mapmode-c| *:cu* *:cunmap*
Bram Moolenaar071d4272004-06-13 20:20:40 +000084 Remove the mapping of {lhs} for the modes where the
85 map command applies. The mapping may remain defined
86 for other modes where it applies.
87 Note: Trailing spaces are included in the {lhs}. This
88 unmap does NOT work: >
89 :map @@ foo
90 :unmap @@ | print
91
Bram Moolenaar06b5db92006-02-10 23:11:56 +000092:mapc[lear] |mapmode-nvo| *:mapc* *:mapclear*
93:nmapc[lear] |mapmode-n| *:nmapc* *:nmapclear*
94:vmapc[lear] |mapmode-v| *:vmapc* *:vmapclear*
95:omapc[lear] |mapmode-o| *:omapc* *:omapclear*
96:mapc[lear]! |mapmode-ic| *:mapc!* *:mapclear!*
97:imapc[lear] |mapmode-i| *:imapc* *:imapclear*
98:lmapc[lear] |mapmode-l| *:lmapc* *:lmapclear*
99:cmapc[lear] |mapmode-c| *:cmapc* *:cmapclear*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000100 Remove ALL mappings for the modes where the map
101 command applies. {not in Vi}
102 Warning: This also removes the default mappings.
103
Bram Moolenaar06b5db92006-02-10 23:11:56 +0000104:map |mapmode-nvo|
105:nm[ap] |mapmode-n|
106:vm[ap] |mapmode-v|
107:om[ap] |mapmode-o|
108:map! |mapmode-ic|
109:im[ap] |mapmode-i|
110:lm[ap] |mapmode-l|
111:cm[ap] |mapmode-c|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000112 List all key mappings for the modes where the map
113 command applies. Note that ":map" and ":map!" are
114 used most often, because they include the other modes.
115
Bram Moolenaar06b5db92006-02-10 23:11:56 +0000116:map {lhs} |mapmode-nvo| *:map_l*
117:nm[ap] {lhs} |mapmode-n| *:nmap_l*
118:vm[ap] {lhs} |mapmode-v| *:vmap_l*
119:om[ap] {lhs} |mapmode-o| *:omap_l*
120:map! {lhs} |mapmode-ic| *:map_l!*
121:im[ap] {lhs} |mapmode-i| *:imap_l*
122:lm[ap] {lhs} |mapmode-l| *:lmap_l*
123:cm[ap] {lhs} |mapmode-c| *:cmap_l*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124 List the key mappings for the key sequences starting
125 with {lhs} in the modes where the map command applies.
126 {not in Vi}
127
128These commands are used to map a key or key sequence to a string of
129characters. You can use this to put command sequences under function keys,
130translate one key into another, etc. See |:mkexrc| for how to save and
131restore the current mappings.
132
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000133 *map-ambiguous*
134When two mappings start with the same sequence of characters, they are
135ambiguous. Example: >
136 :imap aa foo
137 :imap aaa bar
138When Vim has read "aa", it will need to get another character to be able to
139decide if "aa" or "aaa" should be mapped. This means that after typing "aa"
140that mapping won't get expanded yet, Vim is waiting for another character.
141If you type a space, then "foo" will get inserted, plus the space. If you
142type "a", then "bar" will get inserted.
143{Vi does not allow ambiguous mappings}
144
145
1461.2 SPECIAL ARGUMENTS *:map-arguments*
147
Bram Moolenaar4e427192006-03-10 21:34:27 +0000148"<buffer>", "<silent>", "<script>", "<expr>" and "<unique>" can be used in any
149order. They must appear right after the command, before any other arguments.
150
Bram Moolenaar071d4272004-06-13 20:20:40 +0000151 *:map-local* *:map-<buffer>* *E224* *E225*
152If the first argument to one of these commands is "<buffer>" it will apply to
153mappings locally to the current buffer only. Example: >
154 :map <buffer> ,w /[.,;]<CR>
155Then you can map ",w" to something else in another buffer: >
156 :map <buffer> ,w /[#&!]<CR>
157The local buffer mappings are used before the global ones.
158The "<buffer>" argument can also be used to clear mappings: >
159 :unmap <buffer> ,w
160 :mapclear <buffer>
161Local mappings are also cleared when a buffer is deleted, but not when it is
162unloaded. Just like local option values.
163
164 *:map-<silent>* *:map-silent*
165To define a mapping which will not be echoed on the command line, add
166"<silent>" as the first argument. Example: >
167 :map <silent> ,h /Header<CR>
168The search string will not be echoed when using this mapping. Messages from
169the executed command are still given though. To shut them up too, add a
170":silent" in the executed command: >
171 :map <silent> ,h :exe ":silent normal /Header\r"<CR>
172Prompts will still be given, e.g., for inputdialog().
173Using "<silent>" for an abbreviation is possible, but will cause redrawing of
174the command line to fail.
175
176 *:map-<script>* *:map-script*
177If the first argument to one of these commands is "<script>" and it is used to
178define a new mapping or abbreviation, the mapping will only remap characters
179in the {rhs} using mappings that were defined local to a script, starting with
180"<SID>". This can be used to avoid that mappings from outside a script
181interfere (e.g., when CTRL-V is remapped in mswin.vim), but do use other
182mappings defined in the script.
183Note: ":map <script>" and ":noremap <script>" do the same thing. The
184"<script>" overrules the command name. Using ":noremap <script>" is
185preferred, because it's clearer that remapping is (mostly) disabled.
186
187 *:map-<unique>* *E226* *E227*
188If the first argument to one of these commands is "<unique>" and it is used to
189define a new mapping or abbreviation, the command will fail if the mapping or
190abbreviation already exists. Example: >
191 :map <unique> ,w /[#&!]<CR>
192When defining a local mapping, there will also be a check if a global map
193already exists which is equal.
194Example of what will fail: >
195 :map ,w /[#&!]<CR>
196 :map <buffer> <unique> ,w /[.,;]<CR>
Bram Moolenaara40ceaf2006-01-13 22:35:40 +0000197If you want to map a key and then have it do what it was originally mapped to,
198have a look at |maparg()|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000199
Bram Moolenaar4e427192006-03-10 21:34:27 +0000200 *:map-<expr>* *:map-expression*
201If the first argument to one of these commands is "<expr>" and it is used to
202define a new mapping or abbreviation, the argument is an expression. The
203expression is evaluated to obtain the {rhs} that is used. Example: >
204 :inoremap <expr> . InsertDot()
205The result of the InsertDot() function will be inserted. It could check the
206text before the cursor and start omni completion when some condition is met.
207
208Be very careful about side effects! The expression is evaluated while
209obtaining characters, if you change buffer text, move the cursor, edit another
210file, etc. you may very well make command disfunctional.
211
212Here is an example that inserts a list number that increases: >
213 let counter = 0
214 inoremap <expr> <C-L> ListItem()
215 inoremap <expr> <C-R> ListReset()
216
217 func ListItem()
218 let g:counter += 1
219 return g:counter . '. '
220 endfunc
221
222 func ListReset()
223 let g:counter = 0
224 return ''
225 endfunc
226
Bram Moolenaard9967712006-03-11 21:18:15 +0000227CTRL-L inserts the next number, CTRL-R resets the count. CTRL-R returns an
Bram Moolenaar4e427192006-03-10 21:34:27 +0000228empty string, so that nothing is inserted.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000229
230
Bram Moolenaar5b962cf2005-12-12 21:58:40 +00002311.3 MAPPING AND MODES *:map-modes*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000232
233There are five sets of mappings
234- For Normal mode: When typing commands.
235- For Visual mode: When typing commands while the Visual area is highlighted.
236- For Operator-pending mode: When an operator is pending (after "d", "y", "c",
237 etc.). Example: ":omap { w" makes "y{" work like "yw" and "d{" like "dw".
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000238- For Insert mode. These are also used in Replace mode.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000239- For Command-line mode: When entering a ":" or "/" command.
240
241There are no separate mappings for Select mode. The same as for Visual mode
242are used |Select-mode-mapping|.
243
244Special case: While typing a count for a command in Normal mode, mapping zero
245is disabled. This makes it possible to map zero without making it impossible
246to type a count with a zero.
247
248 *map-overview* *map-modes*
249Overview of which map command works in which mode:
250
Bram Moolenaar06b5db92006-02-10 23:11:56 +0000251 *mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000252 commands: modes: ~
253 Normal Visual Operator-pending ~
254:map :noremap :unmap :mapclear yes yes yes
255:nmap :nnoremap :nunmap :nmapclear yes - -
256:vmap :vnoremap :vunmap :vmapclear - yes -
257:omap :onoremap :ounmap :omapclear - - yes
258
Bram Moolenaar06b5db92006-02-10 23:11:56 +0000259 *mapmode-ic* *mapmode-i* *mapmode-c* *mapmode-l*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000260 Insert Command-line Lang-Arg ~
261:map! :noremap! :unmap! :mapclear! yes yes -
262:imap :inoremap :iunmap :imapclear yes - -
263:cmap :cnoremap :cunmap :cmapclear - yes -
264:lmap :lnoremap :lunmap :lmapclear yes* yes* yes*
265
266The original Vi did not have separate mappings for
267Normal/Visual/Operator-pending mode and for Insert/Command-line mode.
268Therefore the ":map" and ":map!" commands enter and display mappings for
269several modes. In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
270":imap" commands to enter mappings for each mode separately.
271
272To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
273first define it for all three modes, then unmap it for Operator-pending mode:
274 :map xx something-difficult
275 :ounmap xx
276Likewise for a mapping for Visual and Operator-pending mode or Normal and
277Operator-pending mode.
278
279 *language-mapping*
280":lmap" defines a mapping that applies to:
281- Insert mode
282- Command-line mode
283- when entering a search pattern
284- the argument of the commands that accept a text character, such as "r" and
285 "f"
286- for the input() line
287Generally: Whenever a character is to be typed that is part of the text in the
288buffer, not a Vim command character. "Lang-Arg" isn't really another mode,
289it's just used here for this situation.
290 The simplest way to load a set of related language mappings is by using the
291'keymap' option. See |45.5|.
292 In Insert mode and in Command-line mode the mappings can be disabled with
293the CTRL-^ command |i_CTRL-^| |c_CTRL-^|. When starting to enter a normal
294command line (not a search pattern) the mappings are disabled until a CTRL-^
295is typed. The state last used is remembered for Insert mode and Search
296patterns separately. The state for Insert mode is also used when typing a
297character as an argument to command like "f" or "t".
Bram Moolenaar071d4272004-06-13 20:20:40 +0000298 Language mappings will never be applied to already mapped characters. They
299are only used for typed characters. This assumes that the language mapping
300was already done when typing the mapping.
301
Bram Moolenaar071d4272004-06-13 20:20:40 +0000302
Bram Moolenaar5b962cf2005-12-12 21:58:40 +00003031.4 LISTING MAPPINGS *map-listing*
304
Bram Moolenaar071d4272004-06-13 20:20:40 +0000305When listing mappings the characters in the first two columns are:
306
307 CHAR MODE ~
308 <Space> Normal, Visual and Operator-pending
309 n Normal
310 v Visual
311 o Operator-pending
312 ! Insert and Command-line
313 i Insert
314 l ":lmap" mappings for Insert, Command-line and Lang-Arg
315 c Command-line
316
317Just before the {rhs} a special character can appear:
318 * indicates that it is not remappable
319 & indicates that only script-local mappings are remappable
320 @ indicates a buffer-local mapping
321
322Everything from the first non-blank after {lhs} up to the end of the line
323(or '|') is considered to be part of {rhs}. This allows the {rhs} to end
324with a space.
325
326Note: When using mappings for Visual mode, you can use the "'<" mark, which
327is the start of the last selected Visual area in the current buffer |'<|.
328
Bram Moolenaarae5bce12005-08-15 21:41:48 +0000329 *:map-verbose*
330When 'verbose' is non-zero, listing a key map will also display where it was
331last defined. Example: >
332
333 :verbose map <C-W>*
334 n <C-W>* * <C-W><C-S>*
335 Last set from /home/abcd/.vimrc
336
Bram Moolenaar5195e452005-08-19 20:32:47 +0000337See |:verbose-cmd| for more information.
Bram Moolenaarae5bce12005-08-15 21:41:48 +0000338
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000339
3401.5 MAPPING SPECIAL KEYS *:map-special-keys*
341
342There are three ways to map a special key:
3431. The Vi-compatible method: Map the key code. Often this is a sequence that
344 starts with <Esc>. To enter a mapping like this you type ":map " and then
345 you have to type CTRL-V before hitting the function key. Note that when
346 the key code for the key is in the termcap (the t_ options), it will
347 automatically be translated into the internal code and become the second
348 way of mapping (unless the 'k' flag is included in 'cpoptions').
3492. The second method is to use the internal code for the function key. To
350 enter such a mapping type CTRL-K and then hit the function key, or use
351 the form "#1", "#2", .. "#9", "#0", "<Up>", "<S-Down>", "<S-F7>", etc.
352 (see table of keys |key-notation|, all keys from <Up> can be used). The
353 first ten function keys can be defined in two ways: Just the number, like
354 "#2", and with "<F>", like "<F2>". Both stand for function key 2. "#0"
355 refers to function key 10, defined with option 't_f10', which may be
356 function key zero on some keyboards. The <> form cannot be used when
357 'cpoptions' includes the '<' flag.
3583. Use the termcap entry, with the form <t_xx>, where "xx" is the name of the
359 termcap entry. Any string entry can be used. For example: >
360 :map <t_F3> G
361< Maps function key 13 to "G". This does not work if 'cpoptions' includes
362 the '<' flag.
363
364The advantage of the second and third method is that the mapping will work on
365different terminals without modification (the function key will be
366translated into the same internal code or the actual key code, no matter what
367terminal you are using. The termcap must be correct for this to work, and you
368must use the same mappings).
369
370DETAIL: Vim first checks if a sequence from the keyboard is mapped. If it
371isn't the terminal key codes are tried (see |terminal-options|). If a
372terminal code is found it is replaced with the internal code. Then the check
373for a mapping is done again (so you can map an internal code to something
374else). What is written into the script file depends on what is recognized.
375If the terminal key code was recognized as a mapping the key code itself is
376written to the script file. If it was recognized as a terminal code the
377internal code is written to the script file.
378
379
3801.6 SPECIAL CHARACTERS *:map-special-chars*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000381 *map_backslash*
382Note that only CTRL-V is mentioned here as a special character for mappings
383and abbreviations. When 'cpoptions' does not contain 'B', a backslash can
384also be used like CTRL-V. The <> notation can be fully used then |<>|. But
385you cannot use "<C-V>" like CTRL-V to escape the special meaning of what
386follows.
387
388To map a backslash, or use a backslash literally in the {rhs}, the special
389sequence "<Bslash>" can be used. This avoids the need to double backslashes
390when using nested mappings.
391
Bram Moolenaar1e015462005-09-25 22:16:38 +0000392 *map_CTRL-C*
393Using CTRL-C in the {lhs} is possible, but it will only work when Vim is
394waiting for a key, not when Vim is busy with something. When Vim is busy
395CTRL-C interrupts/breaks the command.
396When using the GUI version on MS-Windows CTRL-C can be mapped to allow a Copy
397command to the clipboard. Use CTRL-Break to interrupt Vim.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398
399 *map_space_in_lhs*
400To include a space in {lhs} precede it with a CTRL-V (type two CTRL-Vs for
401each space).
402 *map_space_in_rhs*
403If you want a {rhs} that starts with a space, use "<Space>". To be fully Vi
404compatible (but unreadable) don't use the |<>| notation, precede {rhs} with a
405single CTRL-V (you have to type CTRL-V two times).
406 *map_empty_rhs*
407You can create an empty {rhs} by typing nothing after a single CTRL-V (you
408have to type CTRL-V two times). Unfortunately, you cannot do this in a vimrc
409file.
410 *<Nop>*
411A easier way to get a mapping that doesn't produce anything, is to use "<Nop>"
412for the {rhs}. This only works when the |<>| notation is enabled. For
413example, to make sure that function key 8 does nothing at all: >
414 :map <F8> <Nop>
415 :map! <F8> <Nop>
416<
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000417 *map-multibyte*
418It is possible to map multibyte characters, but only the whole character. You
419cannot map the first byte only. This was done to prevent problems in this
420scenario: >
421 :set encoding=latin1
422 :imap <M-C> foo
423 :set encoding=utf-8
424The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
425byte. If you type the character á (0xea <M-a>) in UTF-8 encoding this is the
426two bytes 0xc3 0xa1. You don't want the 0xc3 byte to be mapped then,
427otherwise it would be impossible to type the á character.
428
Bram Moolenaar071d4272004-06-13 20:20:40 +0000429 *<Leader>* *mapleader*
430To define a mapping which uses the "mapleader" variable, the special string
431"<Leader>" can be used. It is replaced with the string value of "mapleader".
432If "mapleader" is not set or empty, a backslash is used instead. Example: >
433 :map <Leader>A oanother line<Esc>
434Works like: >
435 :map \A oanother line<Esc>
436But after: >
437 :let mapleader = ","
438It works like: >
439 :map ,A oanother line<Esc>
440
441Note that the value of "mapleader" is used at the moment the mapping is
442defined. Changing "mapleader" after that has no effect for already defined
443mappings.
444
445 *<LocalLeader>* *maplocalleader*
446Just like <Leader>, except that it uses "maplocalleader" instead of
447"mapleader". <LocalLeader> is to be used for mappings which are local to a
448buffer. Example: >
449 :map <LocalLeader>q \DoItNow
450<
451In a global plugin <Leader> should be used and in a filetype plugin
452<LocalLeader>. "mapleader" and "maplocalleader" can be equal. Although, if
453you make them different, there is a smaller chance of mappings from global
454plugins to clash with mappings for filetype plugins. For example, you could
455keep "mapleader" at the default backslash, and set "maplocalleader" to an
456underscore.
457
458 *map-<SID>*
459In a script the special key name "<SID>" can be used to define a mapping
460that's local to the script. See |<SID>| for details.
461
462 *<Plug>*
463The special key name "<Plug>" can be used for an internal mapping, which is
464not to be matched with any key sequence. This is useful in plugins
465|using-<Plug>|.
466
467 *<Char>* *<Char->*
468To map a character by its decimal, octal or hexadecimal number the <Char>
469construct can be used:
470 <Char-123> character 123
471 <Char-033> character 27
472 <Char-0x7f> character 127
473This is useful to specify a (multi-byte) character in a 'keymap' file.
474Upper and lowercase differences are ignored.
475
476 *map-comments*
477It is not possible to put a comment after these commands, because the '"'
478character is considered to be part of the {lhs} or {rhs}.
479
480 *map_bar*
481Since the '|' character is used to separate a map command from the next
482command, you will have to do something special to include a '|' in {rhs}.
483There are three methods:
484 use works when example ~
485 <Bar> '<' is not in 'cpoptions' :map _l :!ls <Bar> more^M
486 \| 'b' is not in 'cpoptions' :map _l :!ls \| more^M
487 ^V| always, in Vim and Vi :map _l :!ls ^V| more^M
488
489(here ^V stands for CTRL-V; to get one CTRL-V you have to type it twice; you
490cannot use the <> notation "<C-V>" here).
491
492All three work when you use the default setting for 'cpoptions'.
493
494When 'b' is present in 'cpoptions', "\|" will be recognized as a mapping
495ending in a '\' and then another command. This is Vi compatible, but
496illogical when compared to other commands.
497
498 *map_return*
499When you have a mapping that contains an Ex command, you need to put a line
500terminator after it to have it executed. The use of <CR> is recommended for
501this (see |<>|). Example: >
502 :map _ls :!ls -l %<CR>:echo "the end"<CR>
503
504To avoid mapping of the characters you type in insert or Command-line mode,
505type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste'
506option is on.
507
508Note that when an error is encountered (that causes an error message or beep)
509the rest of the mapping is not executed. This is Vi-compatible.
510
511Note that the second character (argument) of the commands @zZtTfF[]rm'`"v
512and CTRL-X is not mapped. This was done to be able to use all the named
513registers and marks, even when the command with the same name has been
514mapped.
515
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000516
5171.7 WHAT KEYS TO MAP *map-which-keys*
518
Bram Moolenaar071d4272004-06-13 20:20:40 +0000519If you are going to map something, you will need to choose which key(s) to use
520for the {lhs}. You will have to avoid keys that are used for Vim commands,
521otherwise you would not be able to use those commands anymore. Here are a few
522suggestions:
523- Function keys <F2>, <F3>, etc.. Also the shifted function keys <S-F1>,
524 <S-F2>, etc. Note that <F1> is already used for the help command.
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000525- Meta-keys (with the ALT key pressed). |:map-alt-keys|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000526- Use the '_' or ',' character and then any other character. The "_" and ","
527 commands do exist in Vim (see |_| and |,|), but you probably never use them.
528- Use a key that is a synonym for another command. For example: CTRL-P and
529 CTRL-N. Use an extra character to allow more mappings.
530
531See the file "index" for keys that are not used and thus can be mapped without
532losing any builtin function. You can also use ":help {key}^D" to find out if
533a key is used for some command. ({key} is the specific key you want to find
534out about, ^D is CTRL-D).
535
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000536
5371.8 EXAMPLES *map-examples*
538
Bram Moolenaar071d4272004-06-13 20:20:40 +0000539A few examples (given as you type them, for "<CR>" you type four characters;
540the '<' flag must not be present in 'cpoptions' for this to work). >
541
542 :map <F3> o#include
543 :map <M-g> /foo<CR>cwbar<Esc>
544 :map _x d/END/e<CR>
545 :map! qq quadrillion questions
546<
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000547
5481.9 USING MAPPINGS *map-typing*
549
Bram Moolenaar071d4272004-06-13 20:20:40 +0000550Vim will compare what you type with the start of a mapped sequence. If there
551is an incomplete match, it will get more characters until there either is a
552complete match or until there is no match at all. Example: If you map! "qq",
553the first 'q' will not appear on the screen until you type another
554character. This is because Vim cannot know if the next character will be a
555'q' or not. If the 'timeout' option is on (which is the default) Vim will
556only wait for one second (or as long as specified with the 'timeoutlen'
557option). After that it assumes that the 'q' is to be interpreted as such. If
558you type slowly, or your system is slow, reset the 'timeout' option. Then you
559might want to set the 'ttimeout' option.
560
561 *map-keys-fails*
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000562There are situations where key codes might not be recognized:
Bram Moolenaar071d4272004-06-13 20:20:40 +0000563- Vim can only read part of the key code. Mostly this is only the first
564 character. This happens on some Unix versions in an xterm.
565- The key code is after character(s) that are mapped. E.g., "<F1><F1>" or
566 "g<F1>".
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000567
Bram Moolenaar071d4272004-06-13 20:20:40 +0000568The result is that the key code is not recognized in this situation, and the
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000569mapping fails. There are two actions needed to avoid this problem:
570
Bram Moolenaar071d4272004-06-13 20:20:40 +0000571- Remove the 'K' flag from 'cpoptions'. This will make Vim wait for the rest
572 of the characters of the function key.
573- When using <F1> to <F4> the actual key code generated may correspond to
574 <xF1> to <xF4>. There are mappings from <xF1> to <F1>, <xF2> to <F2>, etc.,
575 but these are not recognized after another half a mapping. Make sure the
576 key codes for <F1> to <F4> are correct: >
577 :set <F1>=<type CTRL-V><type F1>
578< Type the <F1> as four characters. The part after the "=" must be done with
579 the actual keys, not the literal text.
580Another solution is to use the actual key code in the mapping for the second
581special key: >
582 :map <F1><Esc>OP :echo "yes"<CR>
583Don't type a real <Esc>, Vim will recognize the key code and replace it with
584<F1> anyway.
585
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000586Another problem may be that when keeping ALT or Meta pressed the terminal
587prepends ESC instead of setting the 8th bit. See |:map-alt-keys|.
588
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589 *recursive_mapping*
590If you include the {lhs} in the {rhs} you have a recursive mapping. When
591{lhs} is typed, it will be replaced with {rhs}. When the {lhs} which is
592included in {rhs} is encountered it will be replaced with {rhs}, and so on.
593This makes it possible to repeat a command an infinite number of times. The
594only problem is that the only way to stop this is by causing an error. The
595macros to solve a maze uses this, look there for an example. There is one
596exception: If the {rhs} starts with {lhs}, the first character is not mapped
597again (this is Vi compatible).
598For example: >
599 :map ab abcd
600will execute the "a" command and insert "bcd" in the text. The "ab" in the
601{rhs} will not be mapped again.
602
603If you want to exchange the meaning of two keys you should use the :noremap
604command. For example: >
605 :noremap k j
606 :noremap j k
607This will exchange the cursor up and down commands.
608
609With the normal :map command, when the 'remap' option is on, mapping takes
610place until the text is found not to be a part of a {lhs}. For example, if
611you use: >
612 :map x y
613 :map y x
614Vim will replace x with y, and then y with x, etc. When this has happened
615'maxmapdepth' times (default 1000), Vim will give the error message
616"recursive mapping".
617
618 *:map-undo*
619If you include an undo command inside a mapped sequence, this will bring the
620text back in the state before executing the macro. This is compatible with
621the original Vi, as long as there is only one undo command in the mapped
622sequence (having two undo commands in a mapped sequence did not make sense
623in the original Vi, you would get back the text before the first undo).
624
Bram Moolenaar071d4272004-06-13 20:20:40 +0000625
Bram Moolenaar5b962cf2005-12-12 21:58:40 +00006261.10 MAPPING ALT-KEYS *:map-alt-keys*
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000627
628In the GUI Vim handles the Alt key itself, thus mapping keys with ALT should
629always work. But in a terminal Vim gets a sequence of bytes and has to figure
630out whether ALT was pressed or not.
631
632By default Vim assumes that pressing the ALT key sets the 8th bit of a typed
Bram Moolenaar97d29a12005-12-17 22:02:57 +0000633character. Most decent terminals can work that way, such as xterm, aterm and
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000634rxvt. If your <A-k> mappings don't work it might be that the terminal is
635prefixing the character with an ESC character. But you can just as well type
636ESC before a character, thus Vim doesn't know what happened (except for
637checking the delay between characters, which is not reliable).
638
639As of this writing, some mainstream terminals like gnome-terminal and konsole
640use the ESC prefix. There doesn't appear a way to have them use the 8th bit
Bram Moolenaar97d29a12005-12-17 22:02:57 +0000641instead. Xterm should work well by default. Aterm and rxvt should work well
642when started with the "--meta8" argument. You can also tweak resources like
643"metaSendsEscape", "eightBitInput" and "eightBitOutput".
Bram Moolenaarcdbac1e2005-12-11 21:27:22 +0000644
645On the Linux console, this behavior can be toggled with the "setmetamode"
646command. Bear in mind that not using an ESC prefix could get you in trouble
647with other programs. You should make sure that bash has the "convert-meta"
648option set to "on" in order for your Meta keybindings to still work on it
649(it's the default readline behavior, unless changed by specific system
650configuration). For that, you can add the line: >
651
652 set convert-meta on
653
654to your ~/.inputrc file. If you're creating the file, you might want to use: >
655
656 $include /etc/inputrc
657
658as the first line, if that file exists on your system, to keep global options.
659This may cause a problem for entering special characters, such as the umlaut.
660Then you should use CTRL-V before that character.
661
662Bear in mind that convert-meta has been reported to have troubles when used in
663UTF-8 locales. On terminals like xterm, the "metaSendsEscape" resource can be
664toggled on the fly through the "Main Options" menu, by pressing Ctrl-LeftClick
665on the terminal; that's a good last resource in case you want to send ESC when
666using other applications but not when inside VIM.
667
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000668
6691.11 MAPPING AN OPERATOR *:map-operator*
670
671An operator is used before a {motion} command. To define your own operator
672you must create mapping that first sets the 'operatorfunc' option and then
673invoke the |g@| operator. After the user types the {motion} command the
674specified function will be called.
675
Bram Moolenaara40ceaf2006-01-13 22:35:40 +0000676 *g@* *E774* *E775*
Bram Moolenaar5b962cf2005-12-12 21:58:40 +0000677g@{motion} Call the function set by the 'operatorfunc' option.
678 The '[ mark is positioned at the start of the text
679 moved over by {motion}, the '] mark on the last
680 character of the text.
681 The function is called with one String argument:
682 "line" {motion} was |linewise|
683 "char" {motion} was |characterwise|
684 "block" {motion} was |blockwise-visual||
685 Although "block" would rarely appear, since it can
686 only result from Visual mode where "g@" is not useful.
687 {not available when compiled without the +eval
688 feature}
689
690Here is an example that counts the number of spaces with <F4>: >
691
692 nmap <silent> <F4> :set opfunc=CountSpaces<CR>g@
693 vmap <silent> <F4> :<C-U>call CountSpaces(visualmode(), 1)<CR>
694
695 function! CountSpaces(type, ...)
696 let sel_save = &selection
697 let &selection = "inclusive"
698 let reg_save = @@
699
700 if a:0 " Invoked from Visual mode, use '< and '> marks.
701 silent exe "normal! `<" . a:type . "`>y"
702 elseif a:type == 'line'
703 silent exe "normal! '[V']y"
704 elseif a:type == 'block'
705 silent exe "normal! `[\<C-V>`]y"
706 else
707 silent exe "normal! `[v`]y"
708 endif
709
710 echomsg strlen(substitute(@@, '[^ ]', '', 'g'))
711
712 let &selection = sel_save
713 let @@ = reg_save
714 endfunction
715
716Note that the 'selection' option is temporarily set to "inclusive" to be able
717to yank exactly the right text by using Visual mode from the '[ to the ']
718mark.
719
720Also note that there is a separate mapping for Visual mode. It removes the
721"'<,'>" range that ":" inserts in Visual mode and invokes the function with
722visualmode() and an extra argument.
723
Bram Moolenaar071d4272004-06-13 20:20:40 +0000724==============================================================================
7252. Abbreviations *abbreviations* *Abbreviations*
726
727Abbreviations are used in Insert mode, Replace mode and Command-line mode.
728If you enter a word that is an abbreviation, it is replaced with the word it
729stands for. This can be used to save typing for often used long words. And
730you can use it to automatically correct obvious spelling errors.
731Examples:
732
733 :iab ms MicroSoft
734 :iab tihs this
735
736There are three types of abbreviations:
737
738full-id The "full-id" type consists entirely of keyword characters (letters
739 and characters from 'iskeyword' option). This is the most common
740 abbreviation.
741
742 Examples: "foo", "g3", "-1"
743
744end-id The "end-id" type ends in a keyword character, but all the other
745 characters are not keyword characters.
746
747 Examples: "#i", "..f", "$/7"
748
749non-id The "non-id" type ends in a non-keyword character, the other
750 characters may be of any type, excluding space and Tab. {this type
751 is not supported by Vi}
752
753 Examples: "def#", "4/7$"
754
755Examples of strings that cannot be abbreviations: "a.b", "#def", "a b", "_$r"
756
757An abbreviation is only recognized when you type a non-keyword character.
758This can also be the <Esc> that ends insert mode or the <CR> that ends a
759command. The non-keyword character which ends the abbreviation is inserted
760after the expanded abbreviation. An exception to this is the character <C-]>,
761which is used to expand an abbreviation without inserting any extra
762characters.
763
764Example: >
765 :ab hh hello
766< "hh<Space>" is expanded to "hello<Space>"
767 "hh<C-]>" is expanded to "hello"
768
769The characters before the cursor must match the abbreviation. Each type has
770an additional rule:
771
772full-id In front of the match is a non-keyword character, or this is where
773 the line or insertion starts. Exception: When the abbreviation is
774 only one character, it is not recognized if there is a non-keyword
775 character in front of it, other than a space or a <Tab>.
776
777end-id In front of the match is a keyword character, or a space or a <Tab>,
778 or this is where the line or insertion starts.
779
780non-id In front of the match is a space, <Tab> or the start of the line or
781 the insertion.
782
783Examples: ({CURSOR} is where you type a non-keyword character) >
784 :ab foo four old otters
785< " foo{CURSOR}" is expanded to " four old otters"
786 " foobar{CURSOR}" is not expanded
787 "barfoo{CURSOR}" is not expanded
788>
789 :ab #i #include
790< "#i{CURSOR}" is expanded to "#include"
791 ">#i{CURSOR}" is not expanded
792>
Bram Moolenaar81695252004-12-29 20:58:21 +0000793 :ab ;; <endofline>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000794< "test;;" is not expanded
795 "test ;;" is expanded to "test <endofline>"
796
797To avoid the abbreviation in insert mode: Type part of the abbreviation, exit
798insert mode with <Esc>, re-enter insert mode with "a" and type the rest. Or
799type CTRL-V before the character after the abbreviation.
800To avoid the abbreviation in Command-line mode: Type CTRL-V twice somewhere in
801the abbreviation to avoid it to be replaced. A CTRL-V in front of a normal
802character is mostly ignored otherwise.
803
804It is possible to move the cursor after an abbreviation: >
805 :iab if if ()<Left>
806This does not work if 'cpoptions' includes the '<' flag. |<>|
807
808You can even do more complicated things. For example, to consume the space
809typed after an abbreviation: >
810 func Eatchar(pat)
Bram Moolenaar32466aa2006-02-24 23:53:04 +0000811 let c = nr2char(getchar(0))
Bram Moolenaar071d4272004-06-13 20:20:40 +0000812 return (c =~ a:pat) ? '' : c
813 endfunc
814 iabbr <silent> if if ()<Left><C-R>=Eatchar('\s')<CR>
815
816There are no default abbreviations.
817
818Abbreviations are never recursive. You can use ":ab f f-o-o" without any
819problem. But abbreviations can be mapped. {some versions of Vi support
820recursive abbreviations, for no apparent reason}
821
822Abbreviations are disabled if the 'paste' option is on.
823
824 *:abbreviate-local* *:abbreviate-<buffer>*
825Just like mappings, abbreviations can be local to a buffer. This is mostly
826used in a |filetype-plugin| file. Example for a C plugin file: >
827 :abb <buffer> FF for (i = 0; i < ; ++i)
828<
829 *:ab* *:abbreviate*
830:ab[breviate] list all abbreviations. The character in the first
831 column indicates the mode where the abbreviation is
832 used: 'i' for insert mode, 'c' for Command-line
833 mode, '!' for both. These are the same as for
834 mappings, see |map-listing|.
835
Bram Moolenaare344bea2005-09-01 20:46:49 +0000836 *:abbreviate-verbose*
837When 'verbose' is non-zero, listing an abbreviation will also display where it
838was last defined. Example: >
839
840 :verbose abbreviate
841 ! teh the
842 Last set from /home/abcd/vim/abbr.vim
843
844See |:verbose-cmd| for more information.
845
Bram Moolenaar071d4272004-06-13 20:20:40 +0000846:ab[breviate] {lhs} list the abbreviations that start with {lhs}
847 You may need to insert a CTRL-V (type it twice) to
848 avoid that a typed {lhs} is expanded, since
849 command-line abbreviations apply here.
850
851:ab[breviate] {lhs} {rhs}
852 add abbreviation for {lhs} to {rhs}. If {lhs} already
853 existed it is replaced with the new {rhs}. {rhs} may
854 contain spaces.
855
856 *:una* *:unabbreviate*
857:una[bbreviate] {lhs} Remove abbreviation for {lhs} from the list. If none
858 is found, remove abbreviations in which {lhs} matches
859 with the {rhs}. This is done so that you can even
860 remove abbreviations after expansion. To avoid
861 expansion insert a CTRL-V (type it twice).
862
863 *:norea* *:noreabbrev*
864:norea[bbrev] [lhs] [rhs]
865 same as ":ab", but no remapping for this {rhs} {not
866 in Vi}
867
868 *:ca* *:cabbrev*
869:ca[bbrev] [lhs] [rhs] same as ":ab", but for Command-line mode only. {not
870 in Vi}
871
872 *:cuna* *:cunabbrev*
873:cuna[bbrev] {lhs} same as ":una", but for Command-line mode only. {not
874 in Vi}
875
876 *:cnorea* *:cnoreabbrev*
877:cnorea[bbrev] [lhs] [rhs]
878 same as ":ab", but for Command-line mode only and no
879 remapping for this {rhs} {not in Vi}
880
881 *:ia* *:iabbrev*
882:ia[bbrev] [lhs] [rhs] same as ":ab", but for Insert mode only. {not in Vi}
883
884 *:iuna* *:iunabbrev*
885:iuna[bbrev] {lhs} same as ":una", but for insert mode only. {not in
886 Vi}
887
888 *:inorea* *:inoreabbrev*
889:inorea[bbrev] [lhs] [rhs]
890 same as ":ab", but for Insert mode only and no
891 remapping for this {rhs} {not in Vi}
892
893 *:abc* *:abclear*
894:abc[lear] Remove all abbreviations. {not in Vi}
895
896 *:iabc* *:iabclear*
897:iabc[lear] Remove all abbreviations for Insert mode. {not in Vi}
898
899 *:cabc* *:cabclear*
900:cabc[lear] Remove all abbreviations for Command-line mode. {not
901 in Vi}
902
903 *using_CTRL-V*
904It is possible to use special characters in the rhs of an abbreviation.
905CTRL-V has to be used to avoid the special meaning of most non printable
906characters. How many CTRL-Vs need to be typed depends on how you enter the
907abbreviation. This also applies to mappings. Let's use an example here.
908
909Suppose you want to abbreviate "esc" to enter an <Esc> character. When you
910type the ":ab" command in Vim, you have to enter this: (here ^V is a CTRL-V
911and ^[ is <Esc>)
912
913You type: ab esc ^V^V^V^V^V^[
914
915 All keyboard input is subjected to ^V quote interpretation, so
916 the first, third, and fifth ^V characters simply allow the second,
917 and fourth ^Vs, and the ^[, to be entered into the command-line.
918
919You see: ab esc ^V^V^[
920
921 The command-line contains two actual ^Vs before the ^[. This is
922 how it should appear in your .exrc file, if you choose to go that
923 route. The first ^V is there to quote the second ^V; the :ab
924 command uses ^V as its own quote character, so you can include quoted
Bram Moolenaar81695252004-12-29 20:58:21 +0000925 whitespace or the | character in the abbreviation. The :ab command
Bram Moolenaar071d4272004-06-13 20:20:40 +0000926 doesn't do anything special with the ^[ character, so it doesn't need
927 to be quoted. (Although quoting isn't harmful; that's why typing 7
928 [but not 8!] ^Vs works.)
929
930Stored as: esc ^V^[
931
932 After parsing, the abbreviation's short form ("esc") and long form
933 (the two characters "^V^[") are stored in the abbreviation table.
934 If you give the :ab command with no arguments, this is how the
935 abbreviation will be displayed.
936
937 Later, when the abbreviation is expanded because the user typed in
938 the word "esc", the long form is subjected to the same type of
939 ^V interpretation as keyboard input. So the ^V protects the ^[
Bram Moolenaar81695252004-12-29 20:58:21 +0000940 character from being interpreted as the "exit Insert mode" character.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000941 Instead, the ^[ is inserted into the text.
942
943Expands to: ^[
944
945[example given by Steve Kirkendall]
946
947==============================================================================
9483. Local mappings and functions *script-local*
949
950When using several Vim script files, there is the danger that mappings and
951functions used in one script use the same name as in other scripts. To avoid
952this, they can be made local to the script.
953
954 *<SID>* *<SNR>* *E81*
955The string "<SID>" can be used in a mapping or menu. This requires that the
956'<' flag is not present in 'cpoptions'.
957 When executing the map command, Vim will replace "<SID>" with the special
958key code <SNR>, followed by a number that's unique for the script, and an
959underscore. Example: >
960 :map <SID>Add
961could define a mapping "<SNR>23_Add".
962
963When defining a function in a script, "s:" can be prepended to the name to
964make it local to the script. But when a mapping is executed from outside of
965the script, it doesn't know in which script the function was defined. To
966avoid this problem, use "<SID>" instead of "s:". The same translation is done
967as for mappings. This makes it possible to define a call to the function in
Bram Moolenaar81695252004-12-29 20:58:21 +0000968a mapping.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000969
970When a local function is executed, it runs in the context of the script it was
971defined in. This means that new functions and mappings it defines can also
972use "s:" or "<SID>" and it will use the same unique number as when the
973function itself was defined. Also, the "s:var" local script variables can be
974used.
975
976When executing an autocommand or a user command, it will run in the context of
977the script it was defined in. This makes it possible that the command calls a
978local function or uses a local mapping.
979
980Otherwise, using "<SID>" outside of a script context is an error.
981
982If you need to get the script number to use in a complicated script, you can
Bram Moolenaar4770d092006-01-12 23:22:24 +0000983use this function: >
984 function s:SID()
985 return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze_SID$')
986 endfun
Bram Moolenaar071d4272004-06-13 20:20:40 +0000987
988The "<SNR>" will be shown when listing functions and mappings. This is useful
989to find out what they are defined to.
990
991The |:scriptnames| command can be used to see which scripts have been sourced
992and what their <SNR> number is.
993
994This is all {not in Vi} and {not available when compiled without the +eval
995feature}.
996
997==============================================================================
9984. User-defined commands *user-commands*
999
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001000It is possible to define your own Ex commands. A user-defined command can act
Bram Moolenaar071d4272004-06-13 20:20:40 +00001001just like a built-in command (it can have a range or arguments, arguments can
1002be completed as filenames or buffer names, etc), except that when the command
1003is executed, it is transformed into a normal ex command and then executed.
1004
1005For starters: See section |40.2| in the user manual.
1006
1007 *E183* *user-cmd-ambiguous*
1008All user defined commands must start with an uppercase letter, to avoid
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001009confusion with builtin commands. (There are a few builtin commands, notably
Bram Moolenaar071d4272004-06-13 20:20:40 +00001010:Next, :Print and :X, which do start with an uppercase letter. The builtin
1011will always take precedence in these cases). The other characters of the user
1012command can be uppercase letters, lowercase letters or digits. When using
1013digits, note that other commands that take a numeric argument may become
1014ambiguous. For example, the command ":Cc2" could be the user command ":Cc2"
1015without an argument, or the command ":Cc" with argument "2". It is advised to
1016put a space between the command name and the argument to avoid these problems.
1017
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001018When using a user-defined command, the command can be abbreviated. However, if
1019an abbreviation is not unique, an error will be issued. Furthermore, a
Bram Moolenaar071d4272004-06-13 20:20:40 +00001020built-in command will always take precedence.
1021
1022Example: >
1023 :command Rename ...
1024 :command Renumber ...
1025 :Rena " Means "Rename"
1026 :Renu " Means "Renumber"
1027 :Ren " Error - ambiguous
1028 :command Paste ...
1029 :P " The built-in :Print
1030
1031It is recommended that full names for user-defined commands are used in
1032scripts.
1033
1034:com[mand] *:com* *:command*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001035 List all user-defined commands. When listing commands,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001036 the characters in the first two columns are
1037 ! Command has the -bang attribute
1038 " Command has the -register attribute
1039 b Command is local to current buffer
1040 (see below for details on attributes)
1041
1042:com[mand] {cmd} List the user-defined commands that start with {cmd}
1043
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001044 *:command-verbose*
1045When 'verbose' is non-zero, listing a command will also display where it was
1046last defined. Example: >
1047
1048 :verbose command TOhtml
1049 Name Args Range Complete Definition
1050 TOhtml 0 % :call Convert2HTML(<line1>, <line2>)
1051 Last set from /usr/share/vim/vim-7.0/plugin/tohtml.vim
1052<
Bram Moolenaar5195e452005-08-19 20:32:47 +00001053See |:verbose-cmd| for more information.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001054
Bram Moolenaar071d4272004-06-13 20:20:40 +00001055 *E174* *E182*
1056:com[mand][!] [{attr}...] {cmd} {rep}
1057 Define a user command. The name of the command is
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001058 {cmd} and its replacement text is {rep}. The command's
1059 attributes (see below) are {attr}. If the command
Bram Moolenaar071d4272004-06-13 20:20:40 +00001060 already exists, an error is reported, unless a ! is
1061 specified, in which case the command is redefined.
1062
1063:delc[ommand] {cmd} *:delc* *:delcommand* *E184*
1064 Delete the user-defined command {cmd}.
1065
1066:comc[lear] *:comc* *:comclear*
1067 Delete all user-defined commands.
1068
1069Command attributes
1070
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001071User-defined commands are treated by Vim just like any other ex commands. They
1072can have arguments, or have a range specified. Arguments are subject to
1073completion as filenames, buffers, etc. Exactly how this works depends upon the
Bram Moolenaar071d4272004-06-13 20:20:40 +00001074command's attributes, which are specified when the command is defined.
1075
1076There are a number of attributes, split into four categories: argument
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001077handling, completion behavior, range handling, and special cases. The
Bram Moolenaar071d4272004-06-13 20:20:40 +00001078attributes are described below, by category.
1079
1080Argument handling *E175* *E176*
1081
1082By default, a user defined command will take no arguments (and an error is
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001083reported if any are supplied). However, it is possible to specify that the
1084command can take arguments, using the -nargs attribute. Valid cases are:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001085
1086 -nargs=0 No arguments are allowed (the default)
1087 -nargs=1 Exactly one argument is required
1088 -nargs=* Any number of arguments are allowed (0, 1, or many)
1089 -nargs=? 0 or 1 arguments are allowed
1090 -nargs=+ Arguments must be supplied, but any number are allowed
1091
1092Arguments are considered to be separated by (unescaped) spaces or Tabs in this
1093context.
1094
1095Note that arguments are used as text, not as expressions. Specifically,
1096"s:var" will use the script-local variable in the script where the command was
1097defined, not where it is invoked! Example:
1098 script1.vim: >
1099 :let s:error = "None"
1100 :command -nargs=1 Error echoerr <args>
1101< script2.vim: >
1102 :source script1.vim
1103 :let s:error = "Wrong!"
1104 :Error s:error
1105Executing script2.vim will result in "None" to be echoed. Not what you
1106intended! Calling a function may be an alternative.
1107
1108Completion behavior *:command-completion*
1109 *E179* *E180* *E181*
1110By default, the arguments of user defined commands do not undergo completion.
1111However, by specifying one or the other of the following attributes, argument
1112completion can be enabled:
1113
1114 -complete=augroup autocmd groups
1115 -complete=buffer buffer names
1116 -complete=command Ex command (and arguments)
1117 -complete=dir directory names
1118 -complete=environment environment variable names
1119 -complete=event autocommand events
1120 -complete=expression Vim expression
1121 -complete=file file and directory names
Bram Moolenaar362e1a32006-03-06 23:29:24 +00001122 -complete=shellcmd Shell command
Bram Moolenaar071d4272004-06-13 20:20:40 +00001123 -complete=function function name
1124 -complete=help help subjects
1125 -complete=highlight highlight groups
1126 -complete=mapping mapping name
1127 -complete=menu menus
1128 -complete=option options
1129 -complete=tag tags
1130 -complete=tag_listfiles tags, file names are shown when CTRL-D is hit
1131 -complete=var user variables
1132 -complete=custom,{func} custom completion, defined via {func}
Bram Moolenaara466c992005-07-09 21:03:22 +00001133 -complete=customlist,{func} custom completion, defined via {func}
Bram Moolenaar071d4272004-06-13 20:20:40 +00001134
Bram Moolenaara5792f52005-11-23 21:25:05 +00001135
1136Custom completion *:command-completion-custom*
1137 *:command-completion-customlist*
1138 *E467* *E468*
Bram Moolenaar071d4272004-06-13 20:20:40 +00001139It is possible to define customized completion schemes via the "custom,{func}"
Bram Moolenaara466c992005-07-09 21:03:22 +00001140or the "customlist,{func}" completion argument. The {func} part should be a
1141function with the following prototype >
Bram Moolenaar071d4272004-06-13 20:20:40 +00001142
1143 :function {func}(ArgLead, CmdLine, CursorPos)
1144
Bram Moolenaara466c992005-07-09 21:03:22 +00001145The function need not use all these arguments. The function should provide the
1146completion candidates as the return value.
1147
1148For the "custom" argument, the function should return the completion
1149candidates one per line in a newline separated string.
1150
1151For the "customlist" argument, the function should return the completion
Bram Moolenaara5792f52005-11-23 21:25:05 +00001152candidates as a Vim List. Non-string items in the list are ignored.
Bram Moolenaara466c992005-07-09 21:03:22 +00001153
1154The function arguments are:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001155 ArgLead the leading portion of the argument currently being
1156 completed on
1157 CmdLine the entire command line
Bram Moolenaara5792f52005-11-23 21:25:05 +00001158 CursorPos the cursor position in it (byte index)
Bram Moolenaara466c992005-07-09 21:03:22 +00001159The function may use these for determining context. For the "custom"
1160argument, it is not necessary to filter candidates against the (implicit
1161pattern in) ArgLead. Vim will do filter the candidates with its regexp engine
1162after function return, and this is probably more efficient in most cases. For
1163the "customlist" argument, Vim will not filter the returned completion
1164candidates and the user supplied function should filter the candidates.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001165
1166The following example lists user names to a Finger command >
1167 :com -complete=custom,ListUsers -nargs=1 Finger !finger <args>
1168 :fun ListUsers(A,L,P)
1169 : return system("cut -d: -f1 /etc/passwd")
1170 :endfun
1171
Bram Moolenaara466c992005-07-09 21:03:22 +00001172The following example completes filenames from the directories specified in
1173the 'path' option: >
1174 :com -nargs=1 -bang -complete=customlist,EditFileComplete
1175 \ EditFile edit<bang> <args>
1176 :fun EditFileComplete(A,L,P)
Bram Moolenaara3ffd9c2005-07-21 21:03:15 +00001177 : return split(globpath(&path, a:ArgLead), "\n")
Bram Moolenaara466c992005-07-09 21:03:22 +00001178 :endfun
1179<
Bram Moolenaara5792f52005-11-23 21:25:05 +00001180
Bram Moolenaar071d4272004-06-13 20:20:40 +00001181Range handling *E177* *E178*
1182
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001183By default, user-defined commands do not accept a line number range. However,
Bram Moolenaar071d4272004-06-13 20:20:40 +00001184it is possible to specify that the command does take a range (the -range
1185attribute), or that it takes an arbitrary count value, either in the line
1186number position (-range=N, like the |:split| command) or as a "count"
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001187argument (-count=N, like the |:Next| command). Possible attributes are:
Bram Moolenaar071d4272004-06-13 20:20:40 +00001188
1189 -range Range allowed, default is current line
1190 -range=% Range allowed, default is whole file (1,$)
1191 -range=N A count (default N) which is specified in the line
1192 number position (like |:split|)
1193 -count=N A count (default N) which is specified either in the line
Bram Moolenaar32e7b2d2005-02-27 22:36:47 +00001194 number position, or as an initial argument (like |:Next|).
Bram Moolenaar071d4272004-06-13 20:20:40 +00001195 Specifying -count (without a default) acts like -count=0
1196
1197Note that -range=N and -count=N are mutually exclusive - only one should be
1198specified.
1199
1200Special cases
1201
1202There are some special cases as well:
1203
1204 -bang The command can take a ! modifier (like :q or :w)
1205 -bar The command can be followed by a "|" and another command.
1206 A "|" inside the command argument is not allowed then.
1207 Also checks for a " to start a comment.
1208 -register The first argument to the command can be an optional
1209 register name (like :del, :put, :yank).
1210 -buffer The command will only be available in the current buffer.
1211
1212In the cases of the -count and -register attributes, if the optional argument
1213is supplied, it is removed from the argument list and is available to the
1214replacement text separately.
1215
1216Replacement text
1217
1218The replacement text for a user defined command is scanned for special escape
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001219sequences, using <...> notation. Escape sequences are replaced with values
1220from the entered command line, and all other text is copied unchanged. The
1221resulting string is executed as an Ex command. If the initial < of an escape
Bram Moolenaar071d4272004-06-13 20:20:40 +00001222sequence is preceded by a backslash, the sequence is copied unchanged.
1223
1224The valid escape sequences are
1225
1226 *<line1>*
1227 <line1> The starting line of the command range.
1228 *<line2>*
1229 <line2> The final line of the command range.
1230 *<count>*
1231 <count> Any count supplied (as described for the '-range'
1232 and '-count' attributes).
1233 *<bang>*
1234 <bang> (See the '-bang' attribute) Expands to a ! if the
1235 command was executed with a ! modifier, otherwise
1236 expands to nothing.
1237 *<reg>* *<register>*
1238 <reg> (See the '-register' attribute) The optional register,
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001239 if specified. Otherwise, expands to nothing. <register>
Bram Moolenaar071d4272004-06-13 20:20:40 +00001240 is a synonym for this.
1241 *<args>*
1242 <args> The command arguments, exactly as supplied (but as
1243 noted above, any count or register can consume some
1244 of the arguments, which are then not part of <args>).
1245 <lt> A single '<' (Less-Than) character. This is needed if you
1246 want to get a literal copy of one of these escape sequences
1247 into the expansion - for example, to get <bang>, use
1248 <lt>bang>.
1249
1250 *<q-args>*
1251If the first two characters of an escape sequence are "q-" (for example,
1252<q-args>) then the value is quoted in such a way as to make it a valid value
1253for use in an expression. This uses the argument as one single value.
Bram Moolenaar51485f02005-06-04 21:55:20 +00001254When there is no argument <q-args> is an empty string.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001255
1256To allow commands to pass their arguments on to a user-defined function, there
Bram Moolenaar402d2fe2005-04-15 21:00:38 +00001257is a special form <f-args> ("function args"). This splits the command
Bram Moolenaar071d4272004-06-13 20:20:40 +00001258arguments at spaces and Tabs, quotes each argument individually, and the
1259<f-args> sequence is replaced by the comma-separated list of quoted arguments.
Bram Moolenaar5b8d8fd2005-08-16 23:01:50 +00001260See the Mycmd example below. If no arguments are given <f-args> is removed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001261
1262Examples >
1263
1264 " Delete everything after here to the end
1265 :com Ddel +,$d
1266
1267 " Rename the current buffer
1268 :com -nargs=1 -bang -complete=file Ren f <args>|w<bang>
1269
1270 " Replace a range with the contents of a file
1271 " (Enter this all as one line)
1272 :com -range -nargs=1 -complete=file
1273 Replace <line1>-pu_|<line1>,<line2>d|r <args>|<line1>d
1274
1275 " Count the number of lines in the range
Bram Moolenaar81695252004-12-29 20:58:21 +00001276 :com! -range -nargs=0 Lines echo <line2> - <line1> + 1 "lines"
Bram Moolenaar071d4272004-06-13 20:20:40 +00001277
1278 " Call a user function (example of <f-args>)
1279 :com -nargs=* Mycmd call Myfunc(<f-args>)
1280
1281When executed as: >
1282 :Mycmd arg1 arg2
1283This will invoke: >
1284 :call Myfunc("arg1","arg2")
1285
1286 :" A more substantial example
1287 :function Allargs(command)
1288 : let i = 0
1289 : while i < argc()
1290 : if filereadable(argv(i))
1291 : execute "e " . argv(i)
1292 : execute a:command
1293 : endif
1294 : let i = i + 1
1295 : endwhile
1296 :endfunction
1297 :command -nargs=+ -complete=command Allargs call Allargs(<q-args>)
1298
1299The command Allargs takes any Vim command(s) as argument and executes it on all
1300files in the argument list. Usage example (note use of the "e" flag to ignore
1301errors and the "update" command to write modified buffers): >
1302 :Allargs %s/foo/bar/ge|update
1303This will invoke: >
1304 :call Allargs("%s/foo/bar/ge|update")
1305<
1306When defining an user command in a script, it will be able to call functions
1307local to the script and use mappings local to the script. When the user
1308invokes the user command, it will run in the context of the script it was
1309defined in. This matters if |<SID>| is used in a command.
1310
1311 vim:tw=78:ts=8:ft=help:norl: