blob: 2a114bc0950afb2256ade33576f0a8b637fbda2a [file] [log] [blame]
Bram Moolenaarfb539272014-08-22 19:21:47 +02001*insert.txt* For Vim version 7.4. Last change: 2014 Aug 04
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3
4 VIM REFERENCE MANUAL by Bram Moolenaar
5
6
7 *Insert* *Insert-mode*
8Inserting and replacing text *mode-ins-repl*
9
10Most of this file is about Insert and Replace mode. At the end are a few
11commands for inserting text in other ways.
12
13An overview of the most often used commands can be found in chapter 24 of the
14user manual |usr_24.txt|.
15
161. Special keys |ins-special-keys|
172. Special special keys |ins-special-special|
183. 'textwidth' and 'wrapmargin' options |ins-textwidth|
194. 'expandtab', 'smarttab' and 'softtabstop' options |ins-expandtab|
205. Replace mode |Replace-mode|
216. Virtual Replace mode |Virtual-Replace-mode|
227. Insert mode completion |ins-completion|
238. Insert mode commands |inserting|
249. Ex insert commands |inserting-ex|
2510. Inserting a file |inserting-file|
26
27Also see 'virtualedit', for moving the cursor to positions where there is no
28character. Useful for editing a table.
29
30==============================================================================
311. Special keys *ins-special-keys*
32
33In Insert and Replace mode, the following characters have a special meaning;
34other characters are inserted directly. To insert one of these special
35characters into the buffer, precede it with CTRL-V. To insert a <Nul>
36character use "CTRL-V CTRL-@" or "CTRL-V 000". On some systems, you have to
37use "CTRL-V 003" to insert a CTRL-C. Note: When CTRL-V is mapped you can
38often use CTRL-Q instead |i_CTRL-Q|.
39
40If you are working in a special language mode when inserting text, see the
41'langmap' option, |'langmap'|, on how to avoid switching this mode on and off
42all the time.
43
44If you have 'insertmode' set, <Esc> and a few other keys get another meaning.
45See |'insertmode'|.
46
47char action ~
48-----------------------------------------------------------------------
49 *i_CTRL-[* *i_<Esc>*
50<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
51 abbreviation.
52 Note: If your <Esc> key is hard to hit on your keyboard, train
53 yourself to use CTRL-[.
Bram Moolenaarfb539272014-08-22 19:21:47 +020054 If Esc doesn't work and you are using a Mac, try CTRL-Esc.
55 Or disable Listening under Accessibility preferences.
Bram Moolenaar071d4272004-06-13 20:20:40 +000056 *i_CTRL-C*
57CTRL-C Quit insert mode, go back to Normal mode. Do not check for
Bram Moolenaar677ee682005-01-27 14:41:15 +000058 abbreviations. Does not trigger the |InsertLeave| autocommand
59 event.
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
61 *i_CTRL-@*
62CTRL-@ Insert previously inserted text and stop insert. {Vi: only
63 when typed as first char, only up to 128 chars}
64 *i_CTRL-A*
65CTRL-A Insert previously inserted text. {not in Vi}
66
67 *i_CTRL-H* *i_<BS>* *i_BS*
68<BS> or CTRL-H Delete the character before the cursor (see |i_backspacing|
69 about joining lines).
70 See |:fixdel| if your <BS> key does not do what you want.
71 {Vi: does not delete autoindents}
72 *i_<Del>* *i_DEL*
73<Del> Delete the character under the cursor. If the cursor is at
74 the end of the line, and the 'backspace' option includes
75 "eol", delete the <EOL>; the next line is appended after the
76 current one.
77 See |:fixdel| if your <Del> key does not do what you want.
78 {not in Vi}
79 *i_CTRL-W*
80CTRL-W Delete the word before the cursor (see |i_backspacing| about
81 joining lines). See the section "word motions",
82 |word-motions|, for the definition of a word.
83 *i_CTRL-U*
84CTRL-U Delete all entered characters in the current line (see
85 |i_backspacing| about joining lines).
86
87 *i_CTRL-I* *i_<Tab>* *i_Tab*
88<Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the
89 equivalent number of spaces is inserted (use CTRL-V <Tab> to
90 avoid the expansion; use CTRL-Q <Tab> if CTRL-V is mapped
91 |i_CTRL-Q|). See also the 'smarttab' option and
92 |ins-expandtab|.
93 *i_CTRL-J* *i_<NL>*
94<NL> or CTRL-J Begin new line.
95 *i_CTRL-M* *i_<CR>*
96<CR> or CTRL-M Begin new line.
97 *i_CTRL-K*
98CTRL-K {char1} [char2]
99 Enter digraph (see |digraphs|). When {char1} is a special
100 key, the code for that key is inserted in <> form. For
101 example, the string "<S-Space>" can be entered by typing
102 <C-K><S-Space> (two keys). Neither char is considered for
103 mapping. {not in Vi}
104
105CTRL-N Find next keyword (see |i_CTRL-N|). {not in Vi}
106CTRL-P Find previous keyword (see |i_CTRL-P|). {not in Vi}
107
108CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R*
109 Insert the contents of a register. Between typing CTRL-R and
110 the second character, '"' will be displayed to indicate that
111 you are expected to enter the name of a register.
112 The text is inserted as if you typed it, but mappings and
113 abbreviations are not used. If you have options like
114 'textwidth', 'formatoptions', or 'autoindent' set, this will
115 influence what will be inserted. This is different from what
116 happens with the "p" command and pasting with the mouse.
117 Special registers:
118 '"' the unnamed register, containing the text of
119 the last delete or yank
120 '%' the current file name
121 '#' the alternate file name
122 '*' the clipboard contents (X11: primary selection)
123 '+' the clipboard contents
124 '/' the last search pattern
125 ':' the last command-line
126 '.' the last inserted text
127 '-' the last small (less than a line) delete
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100128 *i_CTRL-R_=*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000129 '=' the expression register: you are prompted to
130 enter an expression (see |expression|)
Bram Moolenaar293ee4d2004-12-09 21:34:53 +0000131 Note that 0x80 (128 decimal) is used for
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +0000132 special keys. E.g., you can use this to move
133 the cursor up:
134 CTRL-R ="\<Up>"
135 Use CTRL-R CTRL-R to insert text literally.
Bram Moolenaar362e1a32006-03-06 23:29:24 +0000136 When the result is a |List| the items are used
137 as lines. They can have line breaks inside
138 too.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100139 When the result is a Float it's automatically
140 converted to a String.
Bram Moolenaar94f76b72013-07-04 22:50:40 +0200141 When append() or setline() is invoked the undo
142 sequence will be broken.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000143 See |registers| about registers. {not in Vi}
144
145CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R*
146 Insert the contents of a register. Works like using a single
147 CTRL-R, but the text is inserted literally, not as if typed.
148 This differs when the register contains characters like <BS>.
149 Example, where register a contains "ab^Hc": >
150 CTRL-R a results in "ac".
151 CTRL-R CTRL-R a results in "ab^Hc".
152< Options 'textwidth', 'formatoptions', etc. still apply. If
153 you also want to avoid these, use "<C-R><C-O>r", see below.
154 The '.' register (last inserted text) is still inserted as
155 typed. {not in Vi}
156
157CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O*
158 Insert the contents of a register literally and don't
159 auto-indent. Does the same as pasting with the mouse
160 |<MiddleMouse>|.
161 Does not replace characters!
162 The '.' register (last inserted text) is still inserted as
163 typed. {not in Vi}
164
165CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P*
166 Insert the contents of a register literally and fix the
167 indent, like |[<MiddleMouse>|.
168 Does not replace characters!
169 The '.' register (last inserted text) is still inserted as
170 typed. {not in Vi}
171
172 *i_CTRL-T*
173CTRL-T Insert one shiftwidth of indent at the start of the current
174 line. The indent is always rounded to a 'shiftwidth' (this is
175 vi compatible). {Vi: only when in indent}
176 *i_CTRL-D*
177CTRL-D Delete one shiftwidth of indent at the start of the current
178 line. The indent is always rounded to a 'shiftwidth' (this is
179 vi compatible). {Vi: CTRL-D works only when used after
180 autoindent}
181 *i_0_CTRL-D*
1820 CTRL-D Delete all indent in the current line. {Vi: CTRL-D works
183 only when used after autoindent}
184 *i_^_CTRL-D*
185^ CTRL-D Delete all indent in the current line. The indent is
186 restored in the next line. This is useful when inserting a
187 label. {Vi: CTRL-D works only when used after autoindent}
188
189 *i_CTRL-V*
190CTRL-V Insert next non-digit literally. For special keys, the
191 terminal code is inserted. It's also possible to enter the
192 decimal, octal or hexadecimal value of a character
193 |i_CTRL-V_digit|.
194 The characters typed right after CTRL-V are not considered for
195 mapping. {Vi: no decimal byte entry}
196 Note: When CTRL-V is mapped (e.g., to paste text) you can
197 often use CTRL-Q instead |i_CTRL-Q|.
198
199 *i_CTRL-Q*
200CTRL-Q Same as CTRL-V.
201 Note: Some terminal connections may eat CTRL-Q, it doesn't
202 work then. It does work in the GUI.
203
204CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000205 be given to complete words or scroll the window. See
Bram Moolenaar071d4272004-06-13 20:20:40 +0000206 |i_CTRL-X| and |ins-completion|. {not in Vi}
207
208 *i_CTRL-E*
209CTRL-E Insert the character which is below the cursor. {not in Vi}
210 *i_CTRL-Y*
211CTRL-Y Insert the character which is above the cursor. {not in Vi}
212 Note that for CTRL-E and CTRL-Y 'textwidth' is not used, to be
213 able to copy characters from a long line.
214
215 *i_CTRL-_*
216CTRL-_ Switch between languages, as follows:
217 - When in a rightleft window, revins and nohkmap are toggled,
218 since English will likely be inserted in this case.
219 - When in a norightleft window, revins and hkmap are toggled,
220 since Hebrew will likely be inserted in this case.
221
222 CTRL-_ moves the cursor to the end of the typed text.
223
224 This command is only available when the 'allowrevins' option
225 is set.
226 Please refer to |rileft.txt| for more information about
227 right-to-left mode.
228 {not in Vi}
Bram Moolenaar9964e462007-05-05 17:54:07 +0000229 Only if compiled with the |+rightleft| feature.
230
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231 *i_CTRL-^*
232CTRL-^ Toggle the use of typing language characters.
233 When language |:lmap| mappings are defined:
234 - If 'iminsert' is 1 (langmap mappings used) it becomes 0 (no
235 langmap mappings used).
236 - If 'iminsert' has another value it becomes 1, thus langmap
237 mappings are enabled.
238 When no language mappings are defined:
239 - If 'iminsert' is 2 (Input Method used) it becomes 0 (no
240 Input Method used).
241 - If 'iminsert' has another value it becomes 2, thus the Input
242 Method is enabled.
243 When set to 1, the value of the "b:keymap_name" variable, the
244 'keymap' option or "<lang>" appears in the status line.
245 The language mappings are normally used to type characters
246 that are different from what the keyboard produces. The
247 'keymap' option can be used to install a whole number of them.
248 {not in Vi}
249
250 *i_CTRL-]*
251CTRL-] Trigger abbreviation, without inserting a character. {not in
252 Vi}
253
254 *i_<Insert>*
255<Insert> Toggle between Insert and Replace mode. {not in Vi}
256-----------------------------------------------------------------------
257
258 *i_backspacing*
259The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option
260(unless 'revins' is set). This is a comma separated list of items:
261
262item action ~
263indent allow backspacing over autoindent
264eol allow backspacing over end-of-line (join lines)
265start allow backspacing over the start position of insert; CTRL-W and
266 CTRL-U stop once at the start position
267
268When 'backspace' is empty, Vi compatible backspacing is used. You cannot
269backspace over autoindent, before column 1 or before where insert started.
270
271For backwards compatibility the values "0", "1" and "2" are also allowed, see
272|'backspace'|.
273
274If the 'backspace' option does contain "eol" and the cursor is in column 1
275when one of the three keys is used, the current line is joined with the
276previous line. This effectively deletes the <EOL> in front of the cursor.
277{Vi: does not cross lines, does not delete past start position of insert}
278
279 *i_CTRL-V_digit*
280With CTRL-V the decimal, octal or hexadecimal value of a character can be
281entered directly. This way you can enter any character, except a line break
282(<NL>, value 10). There are five ways to enter the character value:
283
284first char mode max nr of chars max value ~
285(none) decimal 3 255
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000286o or O octal 3 377 (255)
Bram Moolenaar071d4272004-06-13 20:20:40 +0000287x or X hexadecimal 2 ff (255)
288u hexadecimal 4 ffff (65535)
289U hexadecimal 8 7fffffff (2147483647)
290
291Normally you would type the maximum number of characters. Thus to enter a
292space (value 32) you would type <C-V>032. You can omit the leading zero, in
293which case the character typed after the number must be a non-digit. This
294happens for the other modes as well: As soon as you type a character that is
295invalid for the mode, the value before it will be used and the "invalid"
296character is dealt with in the normal way.
297
298If you enter a value of 10, it will end up in the file as a 0. The 10 is a
299<NL>, which is used internally to represent the <Nul> character. When writing
300the buffer to a file, the <NL> character is translated into <Nul>. The <NL>
301character is written at the end of each line. Thus if you want to insert a
302<NL> character in a file you will have to make a line break.
303
304 *i_CTRL-X* *insert_expand*
305CTRL-X enters a sub-mode where several commands can be used. Most of these
306commands do keyword completion; see |ins-completion|. These are not available
307when Vim was compiled without the |+insert_expand| feature.
308
309Two commands can be used to scroll the window up or down, without exiting
310insert mode:
311
312 *i_CTRL-X_CTRL-E*
313CTRL-X CTRL-E scroll window one line up.
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000314 When doing completion look here: |complete_CTRL-E|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000315
316 *i_CTRL-X_CTRL-Y*
317CTRL-X CTRL-Y scroll window one line down.
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000318 When doing completion look here: |complete_CTRL-Y|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000319
320After CTRL-X is pressed, each CTRL-E (CTRL-Y) scrolls the window up (down) by
321one line unless that would cause the cursor to move from its current position
322in the file. As soon as another key is pressed, CTRL-X mode is exited and
323that key is interpreted as in Insert mode.
324
325
326==============================================================================
3272. Special special keys *ins-special-special*
328
329The following keys are special. They stop the current insert, do something,
330and then restart insertion. This means you can do something without getting
331out of Insert mode. This is very handy if you prefer to use the Insert mode
332all the time, just like editors that don't have a separate Normal mode. You
333may also want to set the 'backspace' option to "indent,eol,start" and set the
334'insertmode' option. You can use CTRL-O if you want to map a function key to
335a command.
336
337The changes (inserted or deleted characters) before and after these keys can
338be undone separately. Only the last change can be redone and always behaves
339like an "i" command.
340
341char action ~
342-----------------------------------------------------------------------
343<Up> cursor one line up *i_<Up>*
344<Down> cursor one line down *i_<Down>*
345CTRL-G <Up> cursor one line up, insert start column *i_CTRL-G_<Up>*
346CTRL-G k cursor one line up, insert start column *i_CTRL-G_k*
347CTRL-G CTRL-K cursor one line up, insert start column *i_CTRL-G_CTRL-K*
348CTRL-G <Down> cursor one line down, insert start column *i_CTRL-G_<Down>*
349CTRL-G j cursor one line down, insert start column *i_CTRL-G_j*
350CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J*
351<Left> cursor one character left *i_<Left>*
352<Right> cursor one character right *i_<Right>*
353<S-Left> cursor one word back (like "b" command) *i_<S-Left>*
354<C-Left> cursor one word back (like "b" command) *i_<C-Left>*
355<S-Right> cursor one word forward (like "w" command) *i_<S-Right>*
356<C-Right> cursor one word forward (like "w" command) *i_<C-Right>*
357<Home> cursor to first char in the line *i_<Home>*
358<End> cursor to after last char in the line *i_<End>*
359<C-Home> cursor to first char in the file *i_<C-Home>*
360<C-End> cursor to after last char in the file *i_<C-End>*
361<LeftMouse> cursor to position of mouse click *i_<LeftMouse>*
362<S-Up> move window one page up *i_<S-Up>*
363<PageUp> move window one page up *i_<PageUp>*
364<S-Down> move window one page down *i_<S-Down>*
365<PageDown> move window one page down *i_<PageDown>*
Bram Moolenaar8d9b40e2010-07-25 15:49:07 +0200366<ScrollWheelDown> move window three lines down *i_<ScrollWheelDown>*
367<S-ScrollWheelDown> move window one page down *i_<S-ScrollWheelDown>*
368<ScrollWheelUp> move window three lines up *i_<ScrollWheelUp>*
369<S-ScrollWheelUp> move window one page up *i_<S-ScrollWheelUp>*
370<ScrollWheelLeft> move window six columns left *i_<ScrollWheelLeft>*
371<S-ScrollWheelLeft> move window one page left *i_<S-ScrollWheelLeft>*
372<ScrollWheelRight> move window six columns right *i_<ScrollWheelRight>*
373<S-ScrollWheelRight> move window one page right *i_<S-ScrollWheelRight>*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000374CTRL-O execute one command, return to Insert mode *i_CTRL-O*
Bram Moolenaar4770d092006-01-12 23:22:24 +0000375CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O*
Bram Moolenaar488c6512005-08-11 20:09:58 +0000376CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L*
Bram Moolenaar071d4272004-06-13 20:20:40 +0000377CTRL-G u break undo sequence, start new change *i_CTRL-G_u*
378-----------------------------------------------------------------------
379
380Note: If the cursor keys take you out of Insert mode, check the 'noesckeys'
381option.
382
383The CTRL-O command sometimes has a side effect: If the cursor was beyond the
384end of the line, it will be put on the last character in the line. In
385mappings it's often better to use <Esc> (first put an "x" in the text, <Esc>
Bram Moolenaar488c6512005-08-11 20:09:58 +0000386will then always put the cursor on it). Or use CTRL-\ CTRL-O, but then
Bram Moolenaara3e6bc92013-01-30 14:18:00 +0100387beware of the cursor possibly being beyond the end of the line. Note that the
388command following CTRL-\ CTRL-O can still move the cursor, it is not restored
389to its original position.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000390
Bram Moolenaar05365702010-10-27 18:34:44 +0200391The CTRL-O command takes you to Normal mode. If you then use a command enter
Bram Moolenaard38b0552012-04-25 19:07:41 +0200392Insert mode again it normally doesn't nest. Thus when typing "a<C-O>a" and
393then <Esc> takes you back to Normal mode, you do not need to type <Esc> twice.
394An exception is when not typing the command, e.g. when executing a mapping or
395sourcing a script. This makes mappings work that briefly switch to Insert
396mode.
Bram Moolenaar05365702010-10-27 18:34:44 +0200397
Bram Moolenaar071d4272004-06-13 20:20:40 +0000398The shifted cursor keys are not available on all terminals.
399
400Another side effect is that a count specified before the "i" or "a" command is
401ignored. That is because repeating the effect of the command after CTRL-O is
402too complicated.
403
404An example for using CTRL-G u: >
405
406 :inoremap <C-H> <C-G>u<C-H>
407
408This redefines the backspace key to start a new undo sequence. You can now
409undo the effect of the backspace key, without changing what you typed before
Bram Moolenaar5b435d62012-04-05 17:33:26 +0200410that, with CTRL-O u. Another example: >
411
412 :inoremap <CR> <C-]><C-G>u<CR>
413
414This breaks undo at each line break. It also expands abbreviations before
415this.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000416
Bram Moolenaarf4b8e572004-06-24 15:53:16 +0000417Using CTRL-O splits undo: the text typed before and after it is undone
418separately. If you want to avoid this (e.g., in a mapping) you might be able
419to use CTRL-R = |i_CTRL-R|. E.g., to call a function: >
420 :imap <F2> <C-R>=MyFunc()<CR>
421
Bram Moolenaar071d4272004-06-13 20:20:40 +0000422When the 'whichwrap' option is set appropriately, the <Left> and <Right>
423keys on the first/last character in the line make the cursor wrap to the
424previous/next line.
425
426The CTRL-G j and CTRL-G k commands can be used to insert text in front of a
427column. Example: >
428 int i;
429 int j;
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000430Position the cursor on the first "int", type "istatic <C-G>j ". The
Bram Moolenaar071d4272004-06-13 20:20:40 +0000431result is: >
432 static int i;
433 int j;
434When inserting the same text in front of the column in every line, use the
435Visual blockwise command "I" |v_b_I|.
436
437==============================================================================
4383. 'textwidth' and 'wrapmargin' options *ins-textwidth*
439
440The 'textwidth' option can be used to automatically break a line before it
441gets too long. Set the 'textwidth' option to the desired maximum line
442length. If you then type more characters (not spaces or tabs), the
443last word will be put on a new line (unless it is the only word on the
444line). If you set 'textwidth' to 0, this feature is disabled.
445
446The 'wrapmargin' option does almost the same. The difference is that
447'textwidth' has a fixed width while 'wrapmargin' depends on the width of the
448screen. When using 'wrapmargin' this is equal to using 'textwidth' with a
449value equal to (columns - 'wrapmargin'), where columns is the width of the
450screen.
451
452When 'textwidth' and 'wrapmargin' are both set, 'textwidth' is used.
453
454If you don't really want to break the line, but view the line wrapped at a
455convenient place, see the 'linebreak' option.
456
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +0000457The line is only broken automatically when using Insert mode, or when
Bram Moolenaar071d4272004-06-13 20:20:40 +0000458appending to a line. When in replace mode and the line length is not
459changed, the line will not be broken.
460
461Long lines are broken if you enter a non-white character after the margin.
462The situations where a line will be broken can be restricted by adding
463characters to the 'formatoptions' option:
464"l" Only break a line if it was not longer than 'textwidth' when the insert
465 started.
466"v" Only break at a white character that has been entered during the
467 current insert command. This is mostly Vi-compatible.
468"lv" Only break if the line was not longer than 'textwidth' when the insert
469 started and only at a white character that has been entered during the
470 current insert command. Only differs from "l" when entering non-white
471 characters while crossing the 'textwidth' boundary.
472
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +0000473Normally an internal function will be used to decide where to break the line.
474If you want to do it in a different way set the 'formatexpr' option to an
475expression that will take care of the line break.
476
Bram Moolenaar071d4272004-06-13 20:20:40 +0000477If you want to format a block of text, you can use the "gq" operator. Type
478"gq" and a movement command to move the cursor to the end of the block. In
479many cases, the command "gq}" will do what you want (format until the end of
480paragraph). Alternatively, you can use "gqap", which will format the whole
481paragraph, no matter where the cursor currently is. Or you can use Visual
482mode: hit "v", move to the end of the block, and type "gq". See also |gq|.
483
484==============================================================================
4854. 'expandtab', 'smarttab' and 'softtabstop' options *ins-expandtab*
486
487If the 'expandtab' option is on, spaces will be used to fill the amount of
488whitespace of the tab. If you want to enter a real <Tab>, type CTRL-V first
489(use CTRL-Q when CTRL-V is mapped |i_CTRL-Q|).
490The 'expandtab' option is off by default. Note that in Replace mode, a single
491character is replaced with several spaces. The result of this is that the
492number of characters in the line increases. Backspacing will delete one
493space at a time. The original character will be put back for only one space
494that you backspace over (the last one). {Vi does not have the 'expandtab'
495option}
496
497 *ins-smarttab*
498When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at
499the beginning of a line and 'tabstop' positions in other places. This means
Bram Moolenaar30b65812012-07-12 22:01:11 +0200500that often spaces instead of a <Tab> character are inserted. When 'smarttab'
Bram Moolenaar071d4272004-06-13 20:20:40 +0000501is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only
502used for ">>" and the like. {not in Vi}
503
504 *ins-softtabstop*
505When the 'softtabstop' option is non-zero, a <Tab> inserts 'softtabstop'
506positions, and a <BS> used to delete white space, will delete 'softtabstop'
507positions. This feels like 'tabstop' was set to 'softtabstop', but a real
508<Tab> character still takes 'tabstop' positions, so your file will still look
509correct when used by other applications.
510
511If 'softtabstop' is non-zero, a <BS> will try to delete as much white space to
512move to the previous 'softtabstop' position, except when the previously
513inserted character is a space, then it will only delete the character before
514the cursor. Otherwise you cannot always delete a single character before the
515cursor. You will have to delete 'softtabstop' characters first, and then type
516extra spaces to get where you want to be.
517
518==============================================================================
5195. Replace mode *Replace* *Replace-mode* *mode-replace*
520
521Enter Replace mode with the "R" command in normal mode.
522
523In Replace mode, one character in the line is deleted for every character you
524type. If there is no character to delete (at the end of the line), the
525typed character is appended (as in Insert mode). Thus the number of
526characters in a line stays the same until you get to the end of the line.
527If a <NL> is typed, a line break is inserted and no character is deleted.
528
529Be careful with <Tab> characters. If you type a normal printing character in
530its place, the number of characters is still the same, but the number of
531columns will become smaller.
532
533If you delete characters in Replace mode (with <BS>, CTRL-W, or CTRL-U), what
534happens is that you delete the changes. The characters that were replaced
535are restored. If you had typed past the existing text, the characters you
536added are deleted. This is effectively a character-at-a-time undo.
537
538If the 'expandtab' option is on, a <Tab> will replace one character with
539several spaces. The result of this is that the number of characters in the
540line increases. Backspacing will delete one space at a time. The original
541character will be put back for only one space that you backspace over (the
542last one). {Vi does not have the 'expandtab' option}
543
544==============================================================================
5456. Virtual Replace mode *vreplace-mode* *Virtual-Replace-mode*
546
547Enter Virtual Replace mode with the "gR" command in normal mode.
Bram Moolenaardb84e452010-08-15 13:50:43 +0200548{not available when compiled without the |+vreplace| feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +0000549{Vi does not have Virtual Replace mode}
550
551Virtual Replace mode is similar to Replace mode, but instead of replacing
552actual characters in the file, you are replacing screen real estate, so that
553characters further on in the file never appear to move.
554
555So if you type a <Tab> it may replace several normal characters, and if you
556type a letter on top of a <Tab> it may not replace anything at all, since the
557<Tab> will still line up to the same place as before.
558
559Typing a <NL> still doesn't cause characters later in the file to appear to
560move. The rest of the current line will be replaced by the <NL> (that is,
561they are deleted), and replacing continues on the next line. A new line is
562NOT inserted unless you go past the end of the file.
563
564Interesting effects are seen when using CTRL-T and CTRL-D. The characters
565before the cursor are shifted sideways as normal, but characters later in the
566line still remain still. CTRL-T will hide some of the old line under the
567shifted characters, but CTRL-D will reveal them again.
568
569As with Replace mode, using <BS> etc will bring back the characters that were
570replaced. This still works in conjunction with 'smartindent', CTRL-T and
571CTRL-D, 'expandtab', 'smarttab', 'softtabstop', etc.
572
573In 'list' mode, Virtual Replace mode acts as if it was not in 'list' mode,
574unless "L" is in 'cpoptions'.
575
Bram Moolenaar24ea3ba2010-09-19 19:01:21 +0200576Note that the only situations for which characters beyond the cursor should
577appear to move are in List mode |'list'|, and occasionally when 'wrap' is set
578(and the line changes length to become shorter or wider than the width of the
579screen). In other cases spaces may be inserted to avoid following characters
580to move.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000581
582This mode is very useful for editing <Tab> separated columns in tables, for
583entering new data while keeping all the columns aligned.
584
585==============================================================================
5867. Insert mode completion *ins-completion*
587
Bram Moolenaar4be06f92005-07-29 22:36:03 +0000588In Insert and Replace mode, there are several commands to complete part of a
Bram Moolenaar071d4272004-06-13 20:20:40 +0000589keyword or line that has been typed. This is useful if you are using
590complicated keywords (e.g., function names with capitals and underscores).
591
592These commands are not available when the |+insert_expand| feature was
593disabled at compile time.
594
595Completion can be done for:
596
5971. Whole lines |i_CTRL-X_CTRL-L|
5982. keywords in the current file |i_CTRL-X_CTRL-N|
5993. keywords in 'dictionary' |i_CTRL-X_CTRL-K|
6004. keywords in 'thesaurus', thesaurus-style |i_CTRL-X_CTRL-T|
6015. keywords in the current and included files |i_CTRL-X_CTRL-I|
6026. tags |i_CTRL-X_CTRL-]|
6037. file names |i_CTRL-X_CTRL-F|
6048. definitions or macros |i_CTRL-X_CTRL-D|
6059. Vim command-line |i_CTRL-X_CTRL-V|
Bram Moolenaar4be06f92005-07-29 22:36:03 +000060610. User defined completion |i_CTRL-X_CTRL-U|
Bram Moolenaarf75a9632005-09-13 21:20:47 +000060711. omni completion |i_CTRL-X_CTRL-O|
Bram Moolenaar488c6512005-08-11 20:09:58 +000060812. Spelling suggestions |i_CTRL-X_s|
60913. keywords in 'complete' |i_CTRL-N|
Bram Moolenaar071d4272004-06-13 20:20:40 +0000610
611All these (except 2) are done in CTRL-X mode. This is a sub-mode of Insert
612and Replace modes. You enter CTRL-X mode by typing CTRL-X and one of the
613CTRL-X commands. You exit CTRL-X mode by typing a key that is not a valid
614CTRL-X mode command. Valid keys are the CTRL-X command itself, CTRL-N (next),
615and CTRL-P (previous).
616
617Also see the 'infercase' option if you want to adjust the case of the match.
618
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000619 *complete_CTRL-E*
620When completion is active you can use CTRL-E to stop it and go back to the
Bram Moolenaar551dbcc2006-04-25 22:13:59 +0000621originally typed text. The CTRL-E will not be inserted.
Bram Moolenaard2cec5b2006-03-28 21:08:56 +0000622
623 *complete_CTRL-Y*
624When the popup menu is displayed you can use CTRL-Y to stop completion and
625accept the currently selected entry. The CTRL-Y is not inserted. Typing a
626space, Enter, or some other unprintable character will leave completion mode
627and insert that typed character.
628
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +0000629When the popup menu is displayed there are a few more special keys, see
630|popupmenu-keys|.
631
Bram Moolenaar071d4272004-06-13 20:20:40 +0000632Note: The keys that are valid in CTRL-X mode are not mapped. This allows for
633":map ^F ^X^F" to work (where ^F is CTRL-F and ^X is CTRL-X). The key that
634ends CTRL-X mode (any key that is not a valid CTRL-X mode command) is mapped.
635Also, when doing completion with 'complete' mappings apply as usual.
636
Bram Moolenaarf193fff2006-04-27 00:02:13 +0000637Note: While completion is active Insert mode can't be used recursively.
638Mappings that somehow invoke ":normal i.." will generate an E523 error.
639
Bram Moolenaar071d4272004-06-13 20:20:40 +0000640The following mappings are suggested to make typing the completion commands
641a bit easier (although they will hide other commands): >
642 :inoremap ^] ^X^]
643 :inoremap ^F ^X^F
644 :inoremap ^D ^X^D
645 :inoremap ^L ^X^L
646
647As a special case, typing CTRL-R to perform register insertion (see
648|i_CTRL-R|) will not exit CTRL-X mode. This is primarily to allow the use of
649the '=' register to call some function to determine the next operation. If
650the contents of the register (or result of the '=' register evaluation) are
651not valid CTRL-X mode keys, then CTRL-X mode will be exited as if those keys
652had been typed.
653
654For example, the following will map <Tab> to either actually insert a <Tab> if
655the current line is currently only whitespace, or start/continue a CTRL-N
656completion operation: >
657
658 function! CleverTab()
659 if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
660 return "\<Tab>"
661 else
662 return "\<C-N>"
Bram Moolenaarb52073a2010-03-17 20:02:06 +0100663 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000664 endfunction
665 inoremap <Tab> <C-R>=CleverTab()<CR>
666
667
668
669Completing whole lines *compl-whole-line*
670
671 *i_CTRL-X_CTRL-L*
672CTRL-X CTRL-L Search backwards for a line that starts with the
Bram Moolenaar83bab712005-08-01 21:58:57 +0000673 same characters as those in the current line before
674 the cursor. Indent is ignored. The matching line is
Bram Moolenaar071d4272004-06-13 20:20:40 +0000675 inserted in front of the cursor.
Bram Moolenaar83bab712005-08-01 21:58:57 +0000676 The 'complete' option is used to decide which buffers
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +0000677 are searched for a match. Both loaded and unloaded
678 buffers are used.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000679 CTRL-L or
680 CTRL-P Search backwards for next matching line. This line
681 replaces the previous matching line.
682
683 CTRL-N Search forward for next matching line. This line
684 replaces the previous matching line.
685
686 CTRL-X CTRL-L After expanding a line you can additionally get the
687 line next to it by typing CTRL-X CTRL-L again, unless
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100688 a double CTRL-X is used. Only works for loaded
689 buffers.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000690
691Completing keywords in current file *compl-current*
692
693 *i_CTRL-X_CTRL-P*
694 *i_CTRL-X_CTRL-N*
695CTRL-X CTRL-N Search forwards for words that start with the keyword
696 in front of the cursor. The found keyword is inserted
697 in front of the cursor.
698
699CTRL-X CTRL-P Search backwards for words that start with the keyword
700 in front of the cursor. The found keyword is inserted
701 in front of the cursor.
702
703 CTRL-N Search forward for next matching keyword. This
704 keyword replaces the previous matching keyword.
705
706 CTRL-P Search backwards for next matching keyword. This
707 keyword replaces the previous matching keyword.
708
709 CTRL-X CTRL-N or
710 CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will
711 copy the words following the previous expansion in
712 other contexts unless a double CTRL-X is used.
713
714If there is a keyword in front of the cursor (a name made out of alphabetic
715characters and characters in 'iskeyword'), it is used as the search pattern,
716with "\<" prepended (meaning: start of a word). Otherwise "\<\k\k" is used
717as search pattern (start of any keyword of at least two characters).
718
719In Replace mode, the number of characters that are replaced depends on the
720length of the matched string. This works like typing the characters of the
721matched string in Replace mode.
722
723If there is not a valid keyword character before the cursor, any keyword of
724at least two characters is matched.
725 e.g., to get:
726 printf("(%g, %g, %g)", vector[0], vector[1], vector[2]);
727 just type:
728 printf("(%g, %g, %g)", vector[0], ^P[1], ^P[2]);
729
Bram Moolenaarf75a9632005-09-13 21:20:47 +0000730The search wraps around the end of the file, the value of 'wrapscan' is not
731used here.
732
Bram Moolenaar071d4272004-06-13 20:20:40 +0000733Multiple repeats of the same completion are skipped; thus a different match
734will be inserted at each CTRL-N and CTRL-P (unless there is only one
735matching keyword).
736
737Single character matches are never included, as they usually just get in
738the way of what you were really after.
739 e.g., to get:
740 printf("name = %s\n", name);
741 just type:
742 printf("name = %s\n", n^P);
743 or even:
744 printf("name = %s\n", ^P);
745The 'n' in '\n' is skipped.
746
747After expanding a word, you can use CTRL-X CTRL-P or CTRL-X CTRL-N to get the
748word following the expansion in other contexts. These sequences search for
749the text just expanded and further expand by getting an extra word. This is
750useful if you need to repeat a sequence of complicated words. Although CTRL-P
751and CTRL-N look just for strings of at least two characters, CTRL-X CTRL-P and
752CTRL-X CTRL-N can be used to expand words of just one character.
753 e.g., to get:
754 M&eacute;xico
755 you can type:
756 M^N^P^X^P^X^P
757CTRL-N starts the expansion and then CTRL-P takes back the single character
758"M", the next two CTRL-X CTRL-P's get the words "&eacute" and ";xico".
759
760If the previous expansion was split, because it got longer than 'textwidth',
761then just the text in the current line will be used.
762
763If the match found is at the end of a line, then the first word in the next
764line will be inserted and the message "word from next line" displayed, if
765this word is accepted the next CTRL-X CTRL-P or CTRL-X CTRL-N will search
766for those lines starting with this word.
767
768
769Completing keywords in 'dictionary' *compl-dictionary*
770
771 *i_CTRL-X_CTRL-K*
772CTRL-X CTRL-K Search the files given with the 'dictionary' option
773 for words that start with the keyword in front of the
774 cursor. This is like CTRL-N, but only the dictionary
775 files are searched, not the current file. The found
776 keyword is inserted in front of the cursor. This
777 could potentially be pretty slow, since all matches
778 are found before the first match is used. By default,
779 the 'dictionary' option is empty.
780 For suggestions where to find a list of words, see the
781 'dictionary' option.
782
783 CTRL-K or
784 CTRL-N Search forward for next matching keyword. This
785 keyword replaces the previous matching keyword.
786
787 CTRL-P Search backwards for next matching keyword. This
788 keyword replaces the previous matching keyword.
789
790 *i_CTRL-X_CTRL-T*
Bram Moolenaar402d2fe2005-04-15 21:00:38 +0000791CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
Bram Moolenaar071d4272004-06-13 20:20:40 +0000792 the 'thesaurus' option instead of 'dictionary'. If a
793 match is found in the thesaurus file, all the
794 remaining words on the same line are included as
795 matches, even though they don't complete the word.
796 Thus a word can be completely replaced.
797
798 For an example, imagine the 'thesaurus' file has a
799 line like this: >
800 angry furious mad enraged
801< Placing the cursor after the letters "ang" and typing
802 CTRL-X CTRL-T would complete the word "angry";
803 subsequent presses would change the word to "furious",
804 "mad" etc.
805 Other uses include translation between two languages,
806 or grouping API functions by keyword.
807
808 CTRL-T or
809 CTRL-N Search forward for next matching keyword. This
810 keyword replaces the previous matching keyword.
811
812 CTRL-P Search backwards for next matching keyword. This
813 keyword replaces the previous matching keyword.
814
815
816Completing keywords in the current and included files *compl-keyword*
817
818The 'include' option is used to specify a line that contains an include file
819name. The 'path' option is used to search for include files.
820
821 *i_CTRL-X_CTRL-I*
822CTRL-X CTRL-I Search for the first keyword in the current and
823 included files that starts with the same characters
824 as those before the cursor. The matched keyword is
825 inserted in front of the cursor.
826
827 CTRL-N Search forwards for next matching keyword. This
828 keyword replaces the previous matching keyword.
829 Note: CTRL-I is the same as <Tab>, which is likely to
830 be typed after a successful completion, therefore
831 CTRL-I is not used for searching for the next match.
832
833 CTRL-P Search backward for previous matching keyword. This
834 keyword replaces the previous matching keyword.
835
836 CTRL-X CTRL-I Further use of CTRL-X CTRL-I will copy the words
837 following the previous expansion in other contexts
838 unless a double CTRL-X is used.
839
840Completing tags *compl-tag*
841 *i_CTRL-X_CTRL-]*
842CTRL-X CTRL-] Search for the first tag that starts with the same
843 characters as before the cursor. The matching tag is
844 inserted in front of the cursor. Alphabetic
845 characters and characters in 'iskeyword' are used
846 to decide which characters are included in the tag
847 name (same as for a keyword). See also |CTRL-]|.
848 The 'showfulltag' option can be used to add context
849 from around the tag definition.
850 CTRL-] or
851 CTRL-N Search forwards for next matching tag. This tag
852 replaces the previous matching tag.
853
854 CTRL-P Search backward for previous matching tag. This tag
855 replaces the previous matching tag.
856
857
858Completing file names *compl-filename*
859 *i_CTRL-X_CTRL-F*
860CTRL-X CTRL-F Search for the first file name that starts with the
861 same characters as before the cursor. The matching
862 file name is inserted in front of the cursor.
863 Alphabetic characters and characters in 'isfname'
864 are used to decide which characters are included in
865 the file name. Note: the 'path' option is not used
866 here (yet).
867 CTRL-F or
868 CTRL-N Search forwards for next matching file name. This
869 file name replaces the previous matching file name.
870
871 CTRL-P Search backward for previous matching file name.
872 This file name replaces the previous matching file
873 name.
874
875
876Completing definitions or macros *compl-define*
877
878The 'define' option is used to specify a line that contains a definition.
879The 'include' option is used to specify a line that contains an include file
880name. The 'path' option is used to search for include files.
881
882 *i_CTRL-X_CTRL-D*
883CTRL-X CTRL-D Search in the current and included files for the
884 first definition (or macro) name that starts with
885 the same characters as before the cursor. The found
886 definition name is inserted in front of the cursor.
887 CTRL-D or
888 CTRL-N Search forwards for next matching macro name. This
889 macro name replaces the previous matching macro
890 name.
891
892 CTRL-P Search backward for previous matching macro name.
893 This macro name replaces the previous matching macro
894 name.
895
896 CTRL-X CTRL-D Further use of CTRL-X CTRL-D will copy the words
897 following the previous expansion in other contexts
898 unless a double CTRL-X is used.
899
900
901Completing Vim commands *compl-vim*
902
903Completion is context-sensitive. It works like on the Command-line. It
Bram Moolenaar4be06f92005-07-29 22:36:03 +0000904completes an Ex command as well as its arguments. This is useful when writing
905a Vim script.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000906
907 *i_CTRL-X_CTRL-V*
908CTRL-X CTRL-V Guess what kind of item is in front of the cursor and
909 find the first match for it.
910 Note: When CTRL-V is mapped you can often use CTRL-Q
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000911 instead of |i_CTRL-Q|.
Bram Moolenaar071d4272004-06-13 20:20:40 +0000912 CTRL-V or
913 CTRL-N Search forwards for next match. This match replaces
914 the previous one.
915
Bram Moolenaar3577c6f2008-06-24 21:16:56 +0000916 CTRL-P Search backwards for previous match. This match
Bram Moolenaar071d4272004-06-13 20:20:40 +0000917 replaces the previous one.
918
919 CTRL-X CTRL-V Further use of CTRL-X CTRL-V will do the same as
920 CTRL-V. This allows mapping a key to do Vim command
921 completion, for example: >
922 :imap <Tab> <C-X><C-V>
923
Bram Moolenaar4be06f92005-07-29 22:36:03 +0000924User defined completion *compl-function*
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000925
926Completion is done by a function that can be defined by the user with the
Bram Moolenaar280f1262006-01-30 00:14:18 +0000927'completefunc' option. See below for how the function is called and an
928example |complete-functions|.
Bram Moolenaarcfbc5ee2004-07-02 15:38:35 +0000929
930 *i_CTRL-X_CTRL-U*
931CTRL-X CTRL-U Guess what kind of item is in front of the cursor and
932 find the first match for it.
933 CTRL-U or
934 CTRL-N Use the next match. This match replaces the previous
935 one.
936
937 CTRL-P Use the previous match. This match replaces the
938 previous one.
939
940
Bram Moolenaarf75a9632005-09-13 21:20:47 +0000941Omni completion *compl-omni*
Bram Moolenaar4be06f92005-07-29 22:36:03 +0000942
Bram Moolenaare344bea2005-09-01 20:46:49 +0000943Completion is done by a function that can be defined by the user with the
Bram Moolenaarf75a9632005-09-13 21:20:47 +0000944'omnifunc' option. This is to be used for filetype-specific completion.
Bram Moolenaare344bea2005-09-01 20:46:49 +0000945
Bram Moolenaar280f1262006-01-30 00:14:18 +0000946See below for how the function is called and an example |complete-functions|.
Bram Moolenaarf75a9632005-09-13 21:20:47 +0000947For remarks about specific filetypes see |compl-omni-filetypes|.
Bram Moolenaar9c102382006-05-03 21:26:49 +0000948More completion scripts will appear, check www.vim.org. Currently there is a
949first version for C++.
Bram Moolenaar4be06f92005-07-29 22:36:03 +0000950
951 *i_CTRL-X_CTRL-O*
952CTRL-X CTRL-O Guess what kind of item is in front of the cursor and
953 find the first match for it.
954 CTRL-O or
955 CTRL-N Use the next match. This match replaces the previous
956 one.
957
958 CTRL-P Use the previous match. This match replaces the
959 previous one.
960
961
Bram Moolenaar488c6512005-08-11 20:09:58 +0000962Spelling suggestions *compl-spelling*
963
Bram Moolenaar5195e452005-08-19 20:32:47 +0000964A word before or at the cursor is located and correctly spelled words are
965suggested to replace it. If there is a badly spelled word in the line, before
966or under the cursor, the cursor is moved to after it. Otherwise the word just
967before the cursor is used for suggestions, even though it isn't badly spelled.
968
Bram Moolenaar488c6512005-08-11 20:09:58 +0000969NOTE: CTRL-S suspends display in many Unix terminals. Use 's' instead. Type
970CTRL-Q to resume displaying.
971
972 *i_CTRL-X_CTRL-S* *i_CTRL-X_s*
973CTRL-X CTRL-S or
974CTRL-X s Locate the word in front of the cursor and find the
975 first spell suggestion for it.
976 CTRL-S or
977 CTRL-N Use the next suggestion. This replaces the previous
978 one. Note that you can't use 's' here.
979
980 CTRL-P Use the previous suggestion. This replaces the
981 previous one.
982
983
Bram Moolenaar071d4272004-06-13 20:20:40 +0000984Completing keywords from different sources *compl-generic*
985
986 *i_CTRL-N*
987CTRL-N Find next match for words that start with the
988 keyword in front of the cursor, looking in places
989 specified with the 'complete' option. The found
990 keyword is inserted in front of the cursor.
991
992 *i_CTRL-P*
993CTRL-P Find previous match for words that start with the
994 keyword in front of the cursor, looking in places
995 specified with the 'complete' option. The found
996 keyword is inserted in front of the cursor.
997
998 CTRL-N Search forward for next matching keyword. This
999 keyword replaces the previous matching keyword.
1000
1001 CTRL-P Search backwards for next matching keyword. This
1002 keyword replaces the previous matching keyword.
1003
1004 CTRL-X CTRL-N or
1005 CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will
1006 copy the words following the previous expansion in
1007 other contexts unless a double CTRL-X is used.
1008
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001009
Bram Moolenaar280f1262006-01-30 00:14:18 +00001010FUNCTIONS FOR FINDING COMPLETIONS *complete-functions*
1011
1012This applies to 'completefunc' and 'omnifunc'.
1013
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001014The function is called in two different ways:
1015- First the function is called to find the start of the text to be completed.
1016- Later the function is called to actually find the matches.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001017
1018On the first invocation the arguments are:
1019 a:findstart 1
1020 a:base empty
1021
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001022The function must return the column where the completion starts. It must be a
1023number between zero and the cursor column "col('.')". This involves looking
1024at the characters just before the cursor and including those characters that
1025could be part of the completed item. The text between this column and the
Bram Moolenaar8e52a592012-05-18 21:49:28 +02001026cursor column will be replaced with the matches.
1027
1028Special return values:
1029 -1 If no completion can be done, the completion will be cancelled with an
1030 error message.
1031 -2 To cancel silently and stay in completion mode.
1032 -3 To cancel silently and leave completion mode.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001033
1034On the second invocation the arguments are:
1035 a:findstart 0
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001036 a:base the text with which matches should match; the text that was
Bram Moolenaar280f1262006-01-30 00:14:18 +00001037 located in the first call (can be empty)
1038
1039The function must return a List with the matching words. These matches
1040usually include the "a:base" text. When there are no matches return an empty
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001041List.
Bram Moolenaar5302d9e2011-09-14 17:55:08 +02001042
1043In order to return more information than the matching words, return a Dict
1044that contains the List. The Dict can have these items:
1045 words The List of matching words (mandatory).
1046 refresh A string to control re-invocation of the function
1047 (optional).
1048 The only value currently recognized is "always", the
1049 effect is that the function is called whenever the
1050 leading text is changed.
1051Other items are ignored.
1052
Bram Moolenaar30b65812012-07-12 22:01:11 +02001053For acting upon end of completion, see the |CompleteDone| autocommand event.
1054
Bram Moolenaar5302d9e2011-09-14 17:55:08 +02001055For example, the function can contain this: >
1056 let matches = ... list of words ...
1057 return {'words': matches, 'refresh': 'always'}
1058<
Bram Moolenaar5c4bab02006-03-10 21:37:46 +00001059 *complete-items*
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001060Each list item can either be a string or a Dictionary. When it is a string it
1061is used as the completion. When it is a Dictionary it can contain these
1062items:
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001063 word the text that will be inserted, mandatory
1064 abbr abbreviation of "word"; when not empty it is used in
1065 the menu instead of "word"
Bram Moolenaar8dff8182006-04-06 20:18:50 +00001066 menu extra text for the popup menu, displayed after "word"
1067 or "abbr"
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001068 info more information about the item, can be displayed in a
1069 preview window
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001070 kind single letter indicating the type of completion
Bram Moolenaar91170f82006-05-05 21:15:17 +00001071 icase when non-zero case is to be ignored when comparing
1072 items to be equal; when omitted zero is used, thus
1073 items that only differ in case are added
Bram Moolenaar4a85b412006-04-23 22:40:29 +00001074 dup when non-zero this match will be added even when an
1075 item with the same word is already present.
Bram Moolenaar166af9b2010-11-16 20:34:40 +01001076 empty when non-zero this match will be added even when it is
1077 an empty string
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001078
Bram Moolenaar5302d9e2011-09-14 17:55:08 +02001079All of these except 'icase', 'dup' and 'empty' must be a string. If an item
1080does not meet these requirements then an error message is given and further
1081items in the list are not used. You can mix string and Dictionary items in
1082the returned list.
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001083
1084The "menu" item is used in the popup menu and may be truncated, thus it should
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001085be relatively short. The "info" item can be longer, it will be displayed in
1086the preview window when "preview" appears in 'completeopt'. The "info" item
1087will also remain displayed after the popup menu has been removed. This is
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001088useful for function arguments. Use a single space for "info" to remove
Bram Moolenaar05365702010-10-27 18:34:44 +02001089existing text in the preview window. The size of the preview window is three
1090lines, but 'previewheight' is used when it has a value of 1 or 2.
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001091
1092The "kind" item uses a single letter to indicate the kind of completion. This
1093may be used to show the completion differently (different color or icon).
1094Currently these types can be used:
1095 v variable
1096 f function or method
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001097 m member of a struct or class
1098 t typedef
1099 d #define or macro
Bram Moolenaar280f1262006-01-30 00:14:18 +00001100
1101When searching for matches takes some time call |complete_add()| to add each
1102match to the total list. These matches should then not appear in the returned
1103list! Call |complete_check()| now and then to allow the user to press a key
1104while still searching for matches. Stop searching when it returns non-zero.
1105
Bram Moolenaar166af9b2010-11-16 20:34:40 +01001106 *E839* *E840*
1107The function is allowed to move the cursor, it is restored afterwards.
1108The function is not allowed to move to another window or delete text.
Bram Moolenaar280f1262006-01-30 00:14:18 +00001109
1110An example that completes the names of the months: >
1111 fun! CompleteMonths(findstart, base)
1112 if a:findstart
1113 " locate the start of the word
1114 let line = getline('.')
1115 let start = col('.') - 1
1116 while start > 0 && line[start - 1] =~ '\a'
1117 let start -= 1
1118 endwhile
1119 return start
1120 else
1121 " find months matching with "a:base"
1122 let res = []
1123 for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
1124 if m =~ '^' . a:base
1125 call add(res, m)
1126 endif
1127 endfor
1128 return res
1129 endif
1130 endfun
1131 set completefunc=CompleteMonths
1132<
1133The same, but now pretending searching for matches is slow: >
1134 fun! CompleteMonths(findstart, base)
1135 if a:findstart
1136 " locate the start of the word
1137 let line = getline('.')
1138 let start = col('.') - 1
1139 while start > 0 && line[start - 1] =~ '\a'
1140 let start -= 1
1141 endwhile
1142 return start
1143 else
1144 " find months matching with "a:base"
1145 for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec")
1146 if m =~ '^' . a:base
1147 call complete_add(m)
1148 endif
1149 sleep 300m " simulate searching for next match
1150 if complete_check()
1151 break
1152 endif
1153 endfor
1154 return []
1155 endif
1156 endfun
1157 set completefunc=CompleteMonths
1158<
1159
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001160INSERT COMPLETION POPUP MENU *ins-completion-menu*
Bram Moolenaarebefac62005-12-28 22:39:57 +00001161 *popupmenu-completion*
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001162Vim can display the matches in a simplistic popup menu.
1163
1164The menu is used when:
Bram Moolenaara2031822006-03-07 22:29:51 +00001165- The 'completeopt' option contains "menu" or "menuone".
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001166- The terminal supports at least 8 colors.
Bram Moolenaard68071d2006-05-02 22:08:30 +00001167- There are at least two matches. One if "menuone" is used.
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001168
Bram Moolenaar56718732006-03-15 22:53:57 +00001169The 'pumheight' option can be used to set a maximum height. The default is to
1170use all space available.
1171
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001172There are three states:
11731. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P.
11742. A cursor key has been used to select another match. The match was not
1175 inserted then, only the entry in the popup menu is highlighted.
11763. Only part of a match has been inserted and characters were typed or the
1177 backspace key was used. The list of matches was then adjusted for what is
1178 in front of the cursor.
Bram Moolenaarc7453f52006-02-10 23:20:28 +00001179
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001180You normally start in the first state, with the first match being inserted.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001181When "longest" is in 'completeopt' and there is more than one match you start
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001182in the third state.
Bram Moolenaarc7453f52006-02-10 23:20:28 +00001183
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001184If you select another match, e.g., with CTRL-N or CTRL-P, you go to the first
1185state. This doesn't change the list of matches.
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001186
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001187When you are back at the original text then you are in the third state. To
Bram Moolenaara2031822006-03-07 22:29:51 +00001188get there right away you can use a mapping that uses CTRL-P right after
1189starting the completion: >
1190 :imap <F7> <C-N><C-P>
Bram Moolenaar76916e62006-03-21 21:23:25 +00001191<
1192 *popupmenu-keys*
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001193In the first state these keys have a special meaning:
1194<BS> and CTRL-H Delete one character, find the matches for the word before
1195 the cursor. This reduces the list of matches, often to one
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001196 entry, and switches to the second state.
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001197Any non-special character:
1198 Stop completion without changing the match and insert the
1199 typed character.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001200
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001201In the second and third state these keys have a special meaning:
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001202<BS> and CTRL-H Delete one character, find the matches for the shorter word
1203 before the cursor. This may find more matches.
1204CTRL-L Add one character from the current match, may reduce the
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001205 number of matches.
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001206any printable, non-white character:
1207 Add this character and reduce the number of matches.
Bram Moolenaarc7453f52006-02-10 23:20:28 +00001208
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001209In all three states these can be used:
Bram Moolenaard2cec5b2006-03-28 21:08:56 +00001210CTRL-Y Yes: Accept the currently selected match and stop completion.
Bram Moolenaar9964e462007-05-05 17:54:07 +00001211CTRL-E End completion, go back to what was there before selecting a
1212 match (what was typed or longest common string).
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001213<PageUp> Select a match several entries back, but don't insert it.
1214<PageDown> Select a match several entries further, but don't insert it.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001215<Up> Select the previous match, as if CTRL-P was used, but don't
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001216 insert it.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001217<Down> Select the next match, as if CTRL-N was used, but don't
Bram Moolenaar80a94a52006-02-23 21:26:58 +00001218 insert it.
Bram Moolenaar9964e462007-05-05 17:54:07 +00001219<Space> or <Tab> Stop completion without changing the match and insert the
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001220 typed character.
1221
Bram Moolenaar044b68f2007-05-10 17:39:52 +00001222The behavior of the <Enter> key depends on the state you are in:
Bram Moolenaar779b74b2006-04-10 14:55:34 +00001223first state: Use the text as it is and insert a line break.
1224second state: Insert the currently selected match.
1225third state: Use the text as it is and insert a line break.
1226
1227In other words: If you used the cursor keys to select another entry in the
Bram Moolenaar044b68f2007-05-10 17:39:52 +00001228list of matches then the <Enter> key inserts that match. If you typed
1229something else then <Enter> inserts a line break.
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001230
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001231
1232The colors of the menu can be changed with these highlight groups:
1233Pmenu normal item |hl-Pmenu|
1234PmenuSel selected item |hl-PmenuSel|
1235PmenuSbar scrollbar |hl-PmenuSbar|
1236PmenuThumb thumb of the scrollbar |hl-PmenuThumb|
1237
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001238There are no special mappings for when the popup menu is visible. However,
1239you can use an Insert mode mapping that checks the |pumvisible()| function to
1240do something different. Example: >
1241 :inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR>
Bram Moolenaar1c7715d2005-10-03 22:02:18 +00001242
Bram Moolenaar5c4bab02006-03-10 21:37:46 +00001243You can use of <expr> in mapping to have the popup menu used when typing a
1244character and some condition is met. For example, for typing a dot: >
1245 inoremap <expr> . MayComplete()
1246 func MayComplete()
1247 if (can complete)
1248 return ".\<C-X>\<C-O>"
1249 endif
1250 return '.'
1251 endfunc
1252
1253See |:map-<expr>| for more info.
1254
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001255
1256FILETYPE-SPECIFIC REMARKS FOR OMNI COMPLETION *compl-omni-filetypes*
1257
1258The file used for {filetype} should be autoload/{filetype}complete.vim
1259in 'runtimepath'. Thus for "java" it is autoload/javacomplete.vim.
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001260
Bram Moolenaara5792f52005-11-23 21:25:05 +00001261
Bram Moolenaarf75a9632005-09-13 21:20:47 +00001262C *ft-c-omni*
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001263
Bram Moolenaarf75a9632005-09-13 21:20:47 +00001264Completion of C code requires a tags file. You should use Exuberant ctags,
1265because it adds extra information that is needed for completion. You can find
Bram Moolenaar9964e462007-05-05 17:54:07 +00001266it here: http://ctags.sourceforge.net/ Version 5.6 or later is recommended.
1267
Bram Moolenaarf75a9632005-09-13 21:20:47 +00001268For version 5.5.4 you should add a patch that adds the "typename:" field:
Bram Moolenaar36fc5352006-03-04 21:49:37 +00001269 ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001270A compiled .exe for MS-Windows can be found at:
Bram Moolenaar36fc5352006-03-04 21:49:37 +00001271 http://georgevreilly.com/vim/ctags.html
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001272
1273If you want to complete system functions you can do something like this. Use
1274ctags to generate a tags file for all the system header files: >
1275 % ctags -R -f ~/.vim/systags /usr/include /usr/local/include
1276In your vimrc file add this tags file to the 'tags' option: >
1277 set tags+=~/.vim/systags
1278
1279When using CTRL-X CTRL-O after a name without any "." or "->" it is completed
1280from the tags file directly. This works for any identifier, also function
1281names. If you want to complete a local variable name, which does not appear
1282in the tags file, use CTRL-P instead.
1283
1284When using CTRL-X CTRL-O after something that has "." or "->" Vim will attempt
1285to recognize the type of the variable and figure out what members it has.
1286This means only members valid for the variable will be listed.
1287
Bram Moolenaarf75a9632005-09-13 21:20:47 +00001288When a member name already was complete, CTRL-X CTRL-O will add a "." or
1289"->" for composite types.
1290
Bram Moolenaar578b49e2005-09-10 19:22:57 +00001291Vim doesn't include a C compiler, only the most obviously formatted
1292declarations are recognized. Preprocessor stuff may cause confusion.
1293When the same structure name appears in multiple places all possible members
1294are included.
1295
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001296
Bram Moolenaar4770d092006-01-12 23:22:24 +00001297CSS *ft-css-omni*
Bram Moolenaara5792f52005-11-23 21:25:05 +00001298
1299Complete properties and their appropriate values according to CSS 2.1
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001300specification.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001301
1302
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001303HTML *ft-html-omni*
1304XHTML *ft-xhtml-omni*
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001305
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001306CTRL-X CTRL-O provides completion of various elements of (X)HTML files. It is
Bram Moolenaardb6ea062014-07-10 22:01:47 +02001307designed to support writing of XHTML 1.0 Strict files but will also work for
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001308other versions of HTML. Features:
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001309
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001310- after "<" complete tag name depending on context (no div suggestion inside
1311 of an a tag); '/>' indicates empty tags
1312- inside of tag complete proper attributes (no width attribute for an a tag);
1313 show also type of attribute; '*' indicates required attributes
1314- when attribute has limited number of possible values help to complete them
Bram Moolenaara5792f52005-11-23 21:25:05 +00001315- complete names of entities
Bram Moolenaar1e015462005-09-25 22:16:38 +00001316- complete values of "class" and "id" attributes with data obtained from
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001317 <style> tag and included CSS files
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001318- when completing value of "style" attribute or working inside of "style" tag
Bram Moolenaar1e015462005-09-25 22:16:38 +00001319 switch to |ft-css-omni| completion
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001320- when completing values of events attributes or working inside of "script"
1321 tag switch to |ft-javascript-omni| completion
Bram Moolenaar1e015462005-09-25 22:16:38 +00001322- when used after "</" CTRL-X CTRL-O will close the last opened tag
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001323
Bram Moolenaara5792f52005-11-23 21:25:05 +00001324Note: When used first time completion menu will be shown with little delay
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001325- this is time needed for loading of data file.
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001326Note: Completion may fail in badly formatted documents. In such case try to
1327run |:make| command to detect formatting problems.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001328
1329
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001330HTML flavor *html-flavor*
1331
Bram Moolenaar9c102382006-05-03 21:26:49 +00001332The default HTML completion depends on the filetype. For HTML files it is
1333HTML 4.01 Transitional ('filetype' is "html"), for XHTML it is XHTML 1.0
1334Strict ('filetype' is "xhtml").
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001335
Bram Moolenaar9c102382006-05-03 21:26:49 +00001336When doing completion outside of any other tag you will have possibility to
1337choose DOCTYPE and the appropriate data file will be loaded and used for all
1338next completions.
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001339
Bram Moolenaar9c102382006-05-03 21:26:49 +00001340More about format of data file in |xml-omni-datafile|. Some of the data files
1341may be found on the Vim website (|www|).
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001342
Bram Moolenaar9c102382006-05-03 21:26:49 +00001343Note that b:html_omni_flavor may point to a file with any XML data. This
1344makes possible to mix PHP (|ft-php-omni|) completion with any XML dialect
1345(assuming you have data file for it). Without setting that variable XHTML 1.0
1346Strict will be used.
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001347
1348
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001349JAVASCRIPT *ft-javascript-omni*
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001350
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001351Completion of most elements of JavaScript language and DOM elements.
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001352
1353Complete:
1354
1355- variables
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001356- function name; show function arguments
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001357- function arguments
1358- properties of variables trying to detect type of variable
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001359- complete DOM objects and properties depending on context
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001360- keywords of language
1361
Bram Moolenaar8b6144b2006-02-08 09:20:24 +00001362Completion works in separate JavaScript files (&ft==javascript), inside of
1363<script> tag of (X)HTML and in values of event attributes (including scanning
Bram Moolenaar9ba7e172013-07-17 22:37:26 +02001364of external files).
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001365
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001366DOM compatibility
1367
1368At the moment (beginning of 2006) there are two main browsers - MS Internet
1369Explorer and Mozilla Firefox. These two applications are covering over 90% of
1370market. Theoretically standards are created by W3C organisation
1371(http://www.w3c.org) but they are not always followed/implemented.
1372
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001373 IE FF W3C Omni completion ~
1374 +/- +/- + + ~
1375 + + - + ~
1376 + - - - ~
1377 - + - - ~
Bram Moolenaarb8a7b562006-02-01 21:47:16 +00001378
1379Regardless from state of implementation in browsers but if element is defined
1380in standards, completion plugin will place element in suggestion list. When
1381both major engines implemented element, even if this is not in standards it
1382will be suggested. All other elements are not placed in suggestion list.
1383
1384
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001385PHP *ft-php-omni*
Bram Moolenaar362e1a32006-03-06 23:29:24 +00001386
Bram Moolenaar9964e462007-05-05 17:54:07 +00001387Completion of PHP code requires a tags file for completion of data from
1388external files and for class aware completion. You should use Exuberant ctags
1389version 5.5.4 or newer. You can find it here: http://ctags.sourceforge.net/
Bram Moolenaar362e1a32006-03-06 23:29:24 +00001390
1391Script completes:
1392
1393- after $ variables name
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001394 - if variable was declared as object add "->", if tags file is available show
1395 name of class
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001396 - after "->" complete only function and variable names specific for given
1397 class. To find class location and contents tags file is required. Because
1398 PHP isn't strongly typed language user can use @var tag to declare class: >
1399
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001400 /* @var $myVar myClass */
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001401 $myVar->
1402<
1403 Still, to find myClass contents tags file is required.
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001404
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00001405- function names with additional info:
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001406 - in case of built-in functions list of possible arguments and after | type
1407 data returned by function
Bram Moolenaar06b5d512010-05-22 15:37:44 +02001408 - in case of user function arguments and name of file where function was
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001409 defined (if it is not current file)
1410
1411- constants names
1412- class names after "new" declaration
1413
Bram Moolenaar362e1a32006-03-06 23:29:24 +00001414
1415Note: when doing completion first time Vim will load all necessary data into
1416memory. It may take several seconds. After next use of completion delay
Bram Moolenaar0b598c22006-03-11 21:22:53 +00001417should not be noticeable.
Bram Moolenaar362e1a32006-03-06 23:29:24 +00001418
1419Script detects if cursor is inside <?php ?> tags. If it is outside it will
1420automatically switch to HTML/CSS/JavaScript completion. Note: contrary to
1421original HTML files completion of tags (and only tags) isn't context aware.
1422
1423
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001424RUBY *ft-ruby-omni*
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001425
1426Completion of Ruby code requires that vim be built with |+ruby|.
1427
1428Ruby completion will parse your buffer on demand in order to provide a list of
1429completions. These completions will be drawn from modules loaded by 'require'
1430and modules defined in the current buffer.
1431
1432The completions provided by CTRL-X CTRL-O are sensitive to the context:
1433
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001434 CONTEXT COMPLETIONS PROVIDED ~
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001435
1436 1. Not inside a class definition Classes, constants and globals
1437
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001438 2. Inside a class definition Methods or constants defined in the class
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001439
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001440 3. After '.', '::' or ':' Methods applicable to the object being
1441 dereferenced
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001442
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001443 4. After ':' or ':foo' Symbol name (beginning with 'foo')
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001444
1445Notes:
1446 - Vim will load/evaluate code in order to provide completions. This may
Bram Moolenaar9964e462007-05-05 17:54:07 +00001447 cause some code execution, which may be a concern. This is no longer
1448 enabled by default, to enable this feature add >
1449 let g:rubycomplete_buffer_loading = 1
1450<- In context 1 above, Vim can parse the entire buffer to add a list of
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00001451 classes to the completion results. This feature is turned off by default,
1452 to enable it add >
1453 let g:rubycomplete_classes_in_global = 1
1454< to your vimrc
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001455 - In context 2 above, anonymous classes are not supported.
1456 - In context 3 above, Vim will attempt to determine the methods supported by
1457 the object.
1458 - Vim can detect and load the Rails environment for files within a rails
1459 project. The feature is disabled by default, to enable it add >
Bram Moolenaar551dbcc2006-04-25 22:13:59 +00001460 let g:rubycomplete_rails = 1
1461< to your vimrc
Bram Moolenaarfc1421e2006-04-20 22:17:20 +00001462
1463
Bram Moolenaar4770d092006-01-12 23:22:24 +00001464SYNTAX *ft-syntax-omni*
1465
Bram Moolenaar9964e462007-05-05 17:54:07 +00001466Vim has the ability to color syntax highlight nearly 500 languages. Part of
1467this highlighting includes knowing what keywords are part of a language. Many
1468filetypes already have custom completion scripts written for them, the
1469syntaxcomplete plugin provides basic completion for all other filetypes. It
1470does this by populating the omni completion list with the text Vim already
1471knows how to color highlight. It can be used for any filetype and provides a
1472minimal language-sensitive completion.
Bram Moolenaar4770d092006-01-12 23:22:24 +00001473
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001474To enable syntax code completion you can run: >
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001475 setlocal omnifunc=syntaxcomplete#Complete
Bram Moolenaar4770d092006-01-12 23:22:24 +00001476
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001477You can automate this by placing the following in your |.vimrc| (after any
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001478":filetype" command): >
1479 if has("autocmd") && exists("+omnifunc")
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001480 autocmd Filetype *
1481 \ if &omnifunc == "" |
1482 \ setlocal omnifunc=syntaxcomplete#Complete |
1483 \ endif
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001484 endif
Bram Moolenaar4770d092006-01-12 23:22:24 +00001485
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001486The above will set completion to this script only if a specific plugin does
1487not already exist for that filetype.
1488
1489Each filetype can have a wide range of syntax items. The plugin allows you to
1490customize which syntax groups to include or exclude from the list. Let's have
1491a look at the PHP filetype to see how this works.
1492
1493If you edit a file called, index.php, run the following command: >
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001494 syntax list
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001495
Bram Moolenaar06b5d512010-05-22 15:37:44 +02001496The first thing you will notice is that there are many different syntax groups.
1497The PHP language can include elements from different languages like HTML,
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001498JavaScript and many more. The syntax plugin will only include syntax groups
1499that begin with the filetype, "php", in this case. For example these syntax
1500groups are included by default with the PHP: phpEnvVar, phpIntVar,
1501phpFunctions.
1502
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001503If you wish non-filetype syntax items to also be included, you can use a
1504regular expression syntax (added in version 13.0 of autoload\syntaxcomplete.vim)
1505to add items. Looking at the output from ":syntax list" while editing a PHP file
1506I can see some of these entries: >
1507 htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001508
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001509To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
1510file, you can use 3 different regexs, one for each language. Or you can
1511simply restrict the include groups to a particular value, without using
1512a regex string: >
1513 let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
1514 let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
1515<
1516The basic form of this variable is: >
1517 let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'
1518
1519The PHP language has an enormous number of items which it knows how to syntax
Bram Moolenaar9ba7e172013-07-17 22:37:26 +02001520highlight. These items will be available within the omni completion list.
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001521
1522Some people may find this list unwieldy or are only interested in certain
1523items. There are two ways to prune this list (if necessary). If you find
1524certain syntax groups you do not wish displayed you can use two different
1525methods to identify these groups. The first specifically lists the syntax
1526groups by name. The second uses a regular expression to identify both
1527syntax groups. Simply add one the following to your vimrc: >
1528 let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
1529 let g:omni_syntax_group_exclude_php = 'php\w*Constant'
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001530
1531Add as many syntax groups to this list by comma separating them. The basic
1532form of this variable is: >
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001533 let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'
Bram Moolenaarc06ac342006-03-02 22:43:39 +00001534
1535You can create as many of these variables as you need, varying only the
1536filetype at the end of the variable name.
Bram Moolenaar4770d092006-01-12 23:22:24 +00001537
Bram Moolenaar9964e462007-05-05 17:54:07 +00001538The plugin uses the isKeyword option to determine where word boundaries are
1539for the syntax items. For example, in the Scheme language completion should
1540include the "-", call-with-output-file. Depending on your filetype, this may
1541not provide the words you are expecting. Setting the
1542g:omni_syntax_use_iskeyword option to 0 will force the syntax plugin to break
1543on word characters. This can be controlled adding the following to your
1544vimrc: >
1545 let g:omni_syntax_use_iskeyword = 0
1546
Bram Moolenaar8b682772010-07-30 21:49:40 +02001547For plugin developers, the plugin exposes a public function OmniSyntaxList.
1548This function can be used to request a List of syntax items. When editing a
1549SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
1550various groups and syntax items. For example: >
1551 syntax list
1552
1553Yields data similar to this: >
1554 sqlOperator xxx some prior all like and any escape exists in is not
1555 or intersect minus between distinct
1556 links to Operator
1557 sqlType xxx varbit varchar nvarchar bigint int uniqueidentifier
1558 date money long tinyint unsigned xml text smalldate
1559 double datetime nchar smallint numeric time bit char
1560 varbinary binary smallmoney
1561 image float integer timestamp real decimal
1562
1563There are two syntax groups listed here: sqlOperator and sqlType. To retrieve
1564a List of syntax items you can call OmniSyntaxList a number of different
1565ways. To retrieve all syntax items regardless of syntax group: >
1566 echo OmniSyntaxList( [] )
1567
1568To retrieve only the syntax items for the sqlOperator syntax group: >
1569 echo OmniSyntaxList( ['sqlOperator'] )
1570
1571To retrieve all syntax items for both the sqlOperator and sqlType groups: >
1572 echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )
1573
Bram Moolenaarec7944a2013-06-12 21:29:15 +02001574A regular expression can also be used: >
1575 echo OmniSyntaxList( ['sql\w\+'] )
1576
Bram Moolenaar8b682772010-07-30 21:49:40 +02001577From within a plugin, you would typically assign the output to a List: >
1578 let myKeywords = []
1579 let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
1580
1581
Bram Moolenaar4770d092006-01-12 23:22:24 +00001582
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001583SQL *ft-sql-omni*
1584
1585Completion for the SQL language includes statements, functions, keywords.
1586It will also dynamically complete tables, procedures, views and column lists
1587with data pulled directly from within a database. For detailed instructions
1588and a tutorial see |omni-sql-completion|.
1589
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001590The SQL completion plugin can be used in conjunction with other completion
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001591plugins. For example, the PHP filetype has its own completion plugin.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001592Since PHP is often used to generate dynamic website by accessing a database,
1593the SQL completion plugin can also be enabled. This allows you to complete
1594PHP code and SQL code at the same time.
1595
Bram Moolenaare2f98b92006-03-29 21:18:24 +00001596
Bram Moolenaar4770d092006-01-12 23:22:24 +00001597XML *ft-xml-omni*
Bram Moolenaara5792f52005-11-23 21:25:05 +00001598
Bram Moolenaar9c102382006-05-03 21:26:49 +00001599Vim 7 provides a mechanism for context aware completion of XML files. It
1600depends on a special |xml-omni-datafile| and two commands: |:XMLns| and
1601|:XMLent|. Features are:
Bram Moolenaara5792f52005-11-23 21:25:05 +00001602
Bram Moolenaar9c102382006-05-03 21:26:49 +00001603- after "<" complete the tag name, depending on context
1604- inside of a tag complete proper attributes
1605- when an attribute has a limited number of possible values help to complete
Bram Moolenaara5792f52005-11-23 21:25:05 +00001606 them
Bram Moolenaar9c102382006-05-03 21:26:49 +00001607- complete names of entities (defined in |xml-omni-datafile| and in the
1608 current file with "<!ENTITY" declarations)
Bram Moolenaara5792f52005-11-23 21:25:05 +00001609- when used after "</" CTRL-X CTRL-O will close the last opened tag
1610
Bram Moolenaar4770d092006-01-12 23:22:24 +00001611Format of XML data file *xml-omni-datafile*
Bram Moolenaara5792f52005-11-23 21:25:05 +00001612
Bram Moolenaar9c102382006-05-03 21:26:49 +00001613XML data files are stored in the "autoload/xml" directory in 'runtimepath'.
1614Vim distribution provides examples of data files in the
1615"$VIMRUNTIME/autoload/xml" directory. They have a meaningful name which will
1616be used in commands. It should be a unique name which will not create
1617conflicts. For example, the name xhtml10s.vim means it is the data file for
1618XHTML 1.0 Strict.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001619
Bram Moolenaar9c102382006-05-03 21:26:49 +00001620Each file contains a variable with a name like g:xmldata_xhtml10s . It is
1621a compound from two parts:
Bram Moolenaara5792f52005-11-23 21:25:05 +00001622
Bram Moolenaar9c102382006-05-03 21:26:49 +000016231. "g:xmldata_" general prefix, constant for all data files
16242. "xhtml10s" the name of the file and the name of the described XML
1625 dialect; it will be used as an argument for the |:XMLns|
1626 command
Bram Moolenaara5792f52005-11-23 21:25:05 +00001627
1628Part two must be exactly the same as name of file.
1629
Bram Moolenaar9c102382006-05-03 21:26:49 +00001630The variable is a |Dictionary|. Keys are tag names and each value is a two
1631element |List|. The first element of the List is also a List with the names
1632of possible children. The second element is a |Dictionary| with the names of
1633attributes as keys and the possible values of attributes as values. Example: >
Bram Moolenaara5792f52005-11-23 21:25:05 +00001634
Bram Moolenaar9c102382006-05-03 21:26:49 +00001635 let g:xmldata_crippled = {
1636 \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"],
1637 \ 'vimxmlroot': ['tag1'],
1638 \ 'tag1':
1639 \ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [],
1640 \ 'attroftag1b': ['valueofattr1', 'valueofattr2']}],
1641 \ 'childoftag1a':
1642 \ [ [], {'attrofchild': ['attrofchild']}],
1643 \ 'childoftag1b':
1644 \ [ ['childoftag1a'], {'attrofchild': []}],
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001645 \ "vimxmltaginfo": {
Bram Moolenaar9c102382006-05-03 21:26:49 +00001646 \ 'tag1': ['Menu info', 'Long information visible in preview window']},
1647 \ 'vimxmlattrinfo': {
1648 \ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}
Bram Moolenaara5792f52005-11-23 21:25:05 +00001649
Bram Moolenaar9c102382006-05-03 21:26:49 +00001650This example would be put in the "autoload/xml/crippled.vim" file and could
1651help to write this file: >
Bram Moolenaara5792f52005-11-23 21:25:05 +00001652
Bram Moolenaar9c102382006-05-03 21:26:49 +00001653 <tag1 attroftag1b="valueofattr1">
1654 <childoftag1a attrofchild>
1655 &amp; &lt;
1656 </childoftag1a>
1657 <childoftag1b attrofchild="5">
1658 <childoftag1a>
1659 &gt; &apos; &quot;
1660 </childoftag1a>
1661 </childoftag1b>
1662 </tag1>
Bram Moolenaara5792f52005-11-23 21:25:05 +00001663
Bram Moolenaar9c102382006-05-03 21:26:49 +00001664In the example four special elements are visible:
1665
16661. "vimxmlentities" - a special key with List containing entities of this XML
Bram Moolenaara5792f52005-11-23 21:25:05 +00001667 dialect.
Bram Moolenaar9c102382006-05-03 21:26:49 +000016682. If the list containing possible values of attributes has one element and
1669 this element is equal to the name of the attribute this attribute will be
1670 treated as boolean and inserted as 'attrname' and not as 'attrname="'
16713. "vimxmltaginfo" - a special key with a Dictionary containing tag
1672 names as keys and two element List as values, for additional menu info and
1673 the long description.
16744. "vimxmlattrinfo" - special key with Dictionary containing attribute names
1675 as keys and two element List as values, for additional menu info and long
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001676 description.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001677
Bram Moolenaar9c102382006-05-03 21:26:49 +00001678Note: Tag names in the data file MUST not contain a namespace description.
1679Check xsl.vim for an example.
1680Note: All data and functions are publicly available as global
1681variables/functions and can be used for personal editing functions.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001682
Bram Moolenaar1d2ba7f2006-02-14 22:29:30 +00001683
Bram Moolenaarc9b4b052006-04-30 18:54:39 +00001684DTD -> Vim *dtd2vim*
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001685
Bram Moolenaar9c102382006-05-03 21:26:49 +00001686On |www| is the script |dtd2vim| which parses DTD and creates an XML data file
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001687for Vim XML omni completion.
1688
1689 dtd2vim: http://www.vim.org/scripts/script.php?script_id=1462
1690
Bram Moolenaar9c102382006-05-03 21:26:49 +00001691Check the beginning of that file for usage details.
1692The script requires perl and:
Bram Moolenaarc1e37902006-04-18 21:55:01 +00001693
1694 perlSGML: http://savannah.nongnu.org/projects/perlsgml
1695
1696
Bram Moolenaara5792f52005-11-23 21:25:05 +00001697Commands
1698
Bram Moolenaar4770d092006-01-12 23:22:24 +00001699:XMLns {name} [{namespace}] *:XMLns*
Bram Moolenaara5792f52005-11-23 21:25:05 +00001700
Bram Moolenaar9c102382006-05-03 21:26:49 +00001701Vim has to know which data file should be used and with which namespace. For
1702loading of the data file and connecting data with the proper namespace use
1703|:XMLns| command. The first (obligatory) argument is the name of the data
1704(xhtml10s, xsl). The second argument is the code of namespace (h, xsl). When
1705used without a second argument the dialect will be used as default - without
1706namespace declaration. For example to use XML completion in .xsl files: >
Bram Moolenaara5792f52005-11-23 21:25:05 +00001707
1708 :XMLns xhtml10s
1709 :XMLns xsl xsl
1710
1711
Bram Moolenaar4770d092006-01-12 23:22:24 +00001712:XMLent {name} *:XMLent*
Bram Moolenaara5792f52005-11-23 21:25:05 +00001713
Bram Moolenaar9c102382006-05-03 21:26:49 +00001714By default entities will be completed from the data file of the default
1715namespace. The XMLent command should be used in case when there is no default
1716namespace: >
Bram Moolenaara5792f52005-11-23 21:25:05 +00001717
Bram Moolenaar4770d092006-01-12 23:22:24 +00001718 :XMLent xhtml10s
Bram Moolenaara5792f52005-11-23 21:25:05 +00001719
1720Usage
1721
Bram Moolenaar9c102382006-05-03 21:26:49 +00001722While used in this situation (after declarations from previous part, | is
Bram Moolenaara5792f52005-11-23 21:25:05 +00001723cursor position): >
1724
Bram Moolenaar4770d092006-01-12 23:22:24 +00001725 <|
Bram Moolenaara5792f52005-11-23 21:25:05 +00001726
Bram Moolenaar9c102382006-05-03 21:26:49 +00001727Will complete to an appropriate XHTML tag, and in this situation: >
Bram Moolenaara5792f52005-11-23 21:25:05 +00001728
Bram Moolenaar4770d092006-01-12 23:22:24 +00001729 <xsl:|
Bram Moolenaara5792f52005-11-23 21:25:05 +00001730
Bram Moolenaar9c102382006-05-03 21:26:49 +00001731Will complete to an appropriate XSL tag.
Bram Moolenaara5792f52005-11-23 21:25:05 +00001732
Bram Moolenaar9c102382006-05-03 21:26:49 +00001733
1734The script xmlcomplete.vim, provided through the |autoload| mechanism,
1735has the xmlcomplete#GetLastOpenTag() function which can be used in XML files
1736to get the name of the last open tag (b:unaryTagsStack has to be defined): >
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001737
Bram Moolenaar4770d092006-01-12 23:22:24 +00001738 :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")
Bram Moolenaarbfd8fc02005-09-20 23:22:24 +00001739
Bram Moolenaar6b730e12005-09-16 21:47:57 +00001740
Bram Moolenaar1e015462005-09-25 22:16:38 +00001741
Bram Moolenaar071d4272004-06-13 20:20:40 +00001742==============================================================================
17438. Insert mode commands *inserting*
1744
1745The following commands can be used to insert new text into the buffer. They
1746can all be undone and repeated with the "." command.
1747
1748 *a*
1749a Append text after the cursor [count] times. If the
1750 cursor is in the first column of an empty line Insert
1751 starts there. But not when 'virtualedit' is set!
1752
1753 *A*
1754A Append text at the end of the line [count] times.
1755
1756<insert> or *i* *insert* *<Insert>*
1757i Insert text before the cursor [count] times.
1758 When using CTRL-O in Insert mode |i_CTRL-O| the count
1759 is not supported.
1760
1761 *I*
1762I Insert text before the first non-blank in the line
1763 [count] times.
Bram Moolenaar4399ef42005-02-12 14:29:27 +00001764 When the 'H' flag is present in 'cpoptions' and the
1765 line only contains blanks, insert start just before
1766 the last blank.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001767
1768 *gI*
1769gI Insert text in column 1 [count] times. {not in Vi}
1770
1771 *gi*
1772gi Insert text in the same position as where Insert mode
1773 was stopped last time in the current buffer.
1774 This uses the |'^| mark. It's different from "`^i"
1775 when the mark is past the end of the line.
1776 The position is corrected for inserted/deleted lines,
1777 but NOT for inserted/deleted characters.
1778 When the |:keepjumps| command modifier is used the |'^|
Bram Moolenaar69a7cb42004-06-20 12:51:53 +00001779 mark won't be changed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001780 {not in Vi}
1781
1782 *o*
1783o Begin a new line below the cursor and insert text,
1784 repeat [count] times. {Vi: blank [count] screen
1785 lines}
Bram Moolenaar4399ef42005-02-12 14:29:27 +00001786 When the '#' flag is in 'cpoptions' the count is
1787 ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001788
1789 *O*
1790O Begin a new line above the cursor and insert text,
1791 repeat [count] times. {Vi: blank [count] screen
1792 lines}
Bram Moolenaar4399ef42005-02-12 14:29:27 +00001793 When the '#' flag is in 'cpoptions' the count is
1794 ignored.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001795
1796These commands are used to start inserting text. You can end insert mode with
1797<Esc>. See |mode-ins-repl| for the other special characters in Insert mode.
1798The effect of [count] takes place after Insert mode is exited.
1799
1800When 'autoindent' is on, the indent for a new line is obtained from the
1801previous line. When 'smartindent' or 'cindent' is on, the indent for a line
1802is automatically adjusted for C programs.
1803
1804'textwidth' can be set to the maximum width for a line. When a line becomes
1805too long when appending characters a line break is automatically inserted.
1806
1807
1808==============================================================================
18099. Ex insert commands *inserting-ex*
1810
1811 *:a* *:append*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001812:{range}a[ppend][!] Insert several lines of text below the specified
Bram Moolenaar071d4272004-06-13 20:20:40 +00001813 line. If the {range} is missing, the text will be
1814 inserted after the current line.
Bram Moolenaardf177f62005-02-22 08:39:57 +00001815 Adding [!] toggles 'autoindent' for the time this
1816 command is executed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001817
1818 *:i* *:in* *:insert*
Bram Moolenaardf177f62005-02-22 08:39:57 +00001819:{range}i[nsert][!] Insert several lines of text above the specified
Bram Moolenaar071d4272004-06-13 20:20:40 +00001820 line. If the {range} is missing, the text will be
1821 inserted before the current line.
Bram Moolenaardf177f62005-02-22 08:39:57 +00001822 Adding [!] toggles 'autoindent' for the time this
1823 command is executed.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001824
1825These two commands will keep on asking for lines, until you type a line
1826containing only a ".". Watch out for lines starting with a backslash, see
1827|line-continuation|.
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001828
Bram Moolenaar4a748032010-09-30 21:47:56 +02001829When in Ex mode (see |-e|) a backslash at the end of the line can be used to
1830insert a NUL character. To be able to have a line ending in a backslash use
1831two backslashes. This means that the number of backslashes is halved, but
1832only at the end of the line.
1833
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +01001834NOTE: These commands cannot be used with |:global| or |:vglobal|.
1835":append" and ":insert" don't work properly in between ":if" and
Bram Moolenaar06fb4352005-01-05 22:10:30 +00001836":endif", ":for" and ":endfor", ":while" and ":endwhile".
Bram Moolenaar071d4272004-06-13 20:20:40 +00001837
1838 *:start* *:startinsert*
1839:star[tinsert][!] Start Insert mode just after executing this command.
1840 Works like typing "i" in Normal mode. When the ! is
1841 included it works like "A", append to the line.
1842 Otherwise insertion starts at the cursor position.
1843 Note that when using this command in a function or
1844 script, the insertion only starts after the function
1845 or script is finished.
Bram Moolenaar87e25fd2005-07-27 21:13:01 +00001846 This command does not work from |:normal|.
Bram Moolenaar071d4272004-06-13 20:20:40 +00001847 {not in Vi}
Bram Moolenaardb84e452010-08-15 13:50:43 +02001848 {not available when compiled without the |+ex_extra|
Bram Moolenaar071d4272004-06-13 20:20:40 +00001849 feature}
1850
1851 *:stopi* *:stopinsert*
1852:stopi[nsert] Stop Insert mode as soon as possible. Works like
1853 typing <Esc> in Insert mode.
1854 Can be used in an autocommand, example: >
1855 :au BufEnter scratch stopinsert
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001856<
1857 *replacing-ex* *:startreplace*
1858:startr[eplace][!] Start Replace mode just after executing this command.
1859 Works just like typing "R" in Normal mode. When the
1860 ! is included it acts just like "$R" had been typed
1861 (ie. begin replace mode at the end-of-line). Other-
1862 wise replacement begins at the cursor position.
1863 Note that when using this command in a function or
1864 script that the replacement will only start after
1865 the function or script is finished.
1866 {not in Vi}
Bram Moolenaardb84e452010-08-15 13:50:43 +02001867 {not available when compiled without the |+ex_extra|
Bram Moolenaar325b7a22004-07-05 15:58:32 +00001868 feature}
Bram Moolenaar071d4272004-06-13 20:20:40 +00001869
Bram Moolenaar61da4982005-12-14 22:02:18 +00001870 *:startgreplace*
1871:startg[replace][!] Just like |:startreplace|, but use Virtual Replace
1872 mode, like with |gR|.
1873 {not in Vi}
Bram Moolenaardb84e452010-08-15 13:50:43 +02001874 {not available when compiled without the |+ex_extra|
Bram Moolenaar61da4982005-12-14 22:02:18 +00001875 feature}
1876
Bram Moolenaar071d4272004-06-13 20:20:40 +00001877==============================================================================
187810. Inserting a file *inserting-file*
1879
1880 *:r* *:re* *:read*
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001881:r[ead] [++opt] [name]
1882 Insert the file [name] (default: current file) below
Bram Moolenaar071d4272004-06-13 20:20:40 +00001883 the cursor.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001884 See |++opt| for the possible values of [++opt].
Bram Moolenaar071d4272004-06-13 20:20:40 +00001885
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001886:{range}r[ead] [++opt] [name]
1887 Insert the file [name] (default: current file) below
Bram Moolenaar071d4272004-06-13 20:20:40 +00001888 the specified line.
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001889 See |++opt| for the possible values of [++opt].
Bram Moolenaar071d4272004-06-13 20:20:40 +00001890
1891 *:r!* *:read!*
Bram Moolenaar0187ca02013-04-12 15:09:51 +02001892:[range]r[ead] [++opt] !{cmd}
1893 Execute {cmd} and insert its standard output below
Bram Moolenaar9964e462007-05-05 17:54:07 +00001894 the cursor or the specified line. A temporary file is
1895 used to store the output of the command which is then
1896 read into the buffer. 'shellredir' is used to save
1897 the output of the command, which can be set to include
1898 stderr or not. {cmd} is executed like with ":!{cmd}",
1899 any '!' is replaced with the previous command |:!|.
Bram Moolenaar0187ca02013-04-12 15:09:51 +02001900 See |++opt| for the possible values of [++opt].
Bram Moolenaar071d4272004-06-13 20:20:40 +00001901
1902These commands insert the contents of a file, or the output of a command,
1903into the buffer. They can be undone. They cannot be repeated with the "."
1904command. They work on a line basis, insertion starts below the line in which
1905the cursor is, or below the specified line. To insert text above the first
1906line use the command ":0r {name}".
1907
1908After the ":read" command, the cursor is left on the first non-blank in the
1909first new line. Unless in Ex mode, then the cursor is left on the last new
1910line (sorry, this is Vi compatible).
1911
1912If a file name is given with ":r", it becomes the alternate file. This can be
1913used, for example, when you want to edit that file instead: ":e! #". This can
1914be switched off by removing the 'a' flag from the 'cpoptions' option.
1915
Bram Moolenaar910f66f2006-04-05 20:41:53 +00001916Of the [++opt] arguments one is specifically for ":read", the ++edit argument.
1917This is useful when the ":read" command is actually used to read a file into
1918the buffer as if editing that file. Use this command in an empty buffer: >
1919 :read ++edit filename
1920The effect is that the 'fileformat', 'fileencoding', 'bomb', etc. options are
1921set to what has been detected for "filename". Note that a single empty line
1922remains, you may want to delete it.
1923
Bram Moolenaar071d4272004-06-13 20:20:40 +00001924 *file-read*
1925The 'fileformat' option sets the <EOL> style for a file:
1926'fileformat' characters name ~
1927 "dos" <CR><NL> or <NL> DOS format
1928 "unix" <NL> Unix format
1929 "mac" <CR> Mac format
1930Previously 'textmode' was used. It is obsolete now.
1931
1932If 'fileformat' is "dos", a <CR> in front of an <NL> is ignored and a CTRL-Z
1933at the end of the file is ignored.
1934
1935If 'fileformat' is "mac", a <NL> in the file is internally represented by a
1936<CR>. This is to avoid confusion with a <NL> which is used to represent a
1937<NUL>. See |CR-used-for-NL|.
1938
1939If the 'fileformats' option is not empty Vim tries to recognize the type of
1940<EOL> (see |file-formats|). However, the 'fileformat' option will not be
1941changed, the detected format is only used while reading the file.
1942A similar thing happens with 'fileencodings'.
1943
1944On non-MS-DOS, Win32, and OS/2 systems the message "[dos format]" is shown if
1945a file is read in DOS format, to remind you that something unusual is done.
1946On Macintosh, MS-DOS, Win32, and OS/2 the message "[unix format]" is shown if
1947a file is read in Unix format.
1948On non-Macintosh systems, the message "[Mac format]" is shown if a file is
1949read in Mac format.
1950
1951An example on how to use ":r !": >
1952 :r !uuencode binfile binfile
1953This command reads "binfile", uuencodes it and reads it into the current
1954buffer. Useful when you are editing e-mail and want to include a binary
1955file.
1956
1957 *read-messages*
1958When reading a file Vim will display a message with information about the read
1959file. In the table is an explanation for some of the items. The others are
1960self explanatory. Using the long or the short version depends on the
1961'shortmess' option.
1962
1963 long short meaning ~
1964 [readonly] {RO} the file is write protected
1965 [fifo/socket] using a stream
1966 [fifo] using a fifo stream
1967 [socket] using a socket stream
1968 [CR missing] reading with "dos" 'fileformat' and a
1969 NL without a preceding CR was found.
1970 [NL found] reading with "mac" 'fileformat' and a
1971 NL was found (could be "unix" format)
1972 [long lines split] at least one line was split in two
1973 [NOT converted] conversion from 'fileencoding' to
1974 'encoding' was desired but not
1975 possible
1976 [converted] conversion from 'fileencoding' to
1977 'encoding' done
1978 [crypted] file was decrypted
1979 [READ ERRORS] not all of the file could be read
1980
1981
1982 vim:tw=78:ts=8:ft=help:norl: