Bram Moolenaar | c1e3790 | 2006-04-18 21:55:01 +0000 | [diff] [blame] | 1 | *insert.txt* For Vim version 7.0e. Last change: 2006 Apr 18 |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 2 | |
| 3 | |
| 4 | VIM REFERENCE MANUAL by Bram Moolenaar |
| 5 | |
| 6 | |
| 7 | *Insert* *Insert-mode* |
| 8 | Inserting and replacing text *mode-ins-repl* |
| 9 | |
| 10 | Most of this file is about Insert and Replace mode. At the end are a few |
| 11 | commands for inserting text in other ways. |
| 12 | |
| 13 | An overview of the most often used commands can be found in chapter 24 of the |
| 14 | user manual |usr_24.txt|. |
| 15 | |
| 16 | 1. Special keys |ins-special-keys| |
| 17 | 2. Special special keys |ins-special-special| |
| 18 | 3. 'textwidth' and 'wrapmargin' options |ins-textwidth| |
| 19 | 4. 'expandtab', 'smarttab' and 'softtabstop' options |ins-expandtab| |
| 20 | 5. Replace mode |Replace-mode| |
| 21 | 6. Virtual Replace mode |Virtual-Replace-mode| |
| 22 | 7. Insert mode completion |ins-completion| |
| 23 | 8. Insert mode commands |inserting| |
| 24 | 9. Ex insert commands |inserting-ex| |
| 25 | 10. Inserting a file |inserting-file| |
| 26 | |
| 27 | Also see 'virtualedit', for moving the cursor to positions where there is no |
| 28 | character. Useful for editing a table. |
| 29 | |
| 30 | ============================================================================== |
| 31 | 1. Special keys *ins-special-keys* |
| 32 | |
| 33 | In Insert and Replace mode, the following characters have a special meaning; |
| 34 | other characters are inserted directly. To insert one of these special |
| 35 | characters into the buffer, precede it with CTRL-V. To insert a <Nul> |
| 36 | character use "CTRL-V CTRL-@" or "CTRL-V 000". On some systems, you have to |
| 37 | use "CTRL-V 003" to insert a CTRL-C. Note: When CTRL-V is mapped you can |
| 38 | often use CTRL-Q instead |i_CTRL-Q|. |
| 39 | |
| 40 | If 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 |
| 42 | all the time. |
| 43 | |
| 44 | If you have 'insertmode' set, <Esc> and a few other keys get another meaning. |
| 45 | See |'insertmode'|. |
| 46 | |
| 47 | char 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-[. |
| 54 | *i_CTRL-C* |
| 55 | CTRL-C Quit insert mode, go back to Normal mode. Do not check for |
Bram Moolenaar | 677ee68 | 2005-01-27 14:41:15 +0000 | [diff] [blame] | 56 | abbreviations. Does not trigger the |InsertLeave| autocommand |
| 57 | event. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 58 | |
| 59 | *i_CTRL-@* |
| 60 | CTRL-@ Insert previously inserted text and stop insert. {Vi: only |
| 61 | when typed as first char, only up to 128 chars} |
| 62 | *i_CTRL-A* |
| 63 | CTRL-A Insert previously inserted text. {not in Vi} |
| 64 | |
| 65 | *i_CTRL-H* *i_<BS>* *i_BS* |
| 66 | <BS> or CTRL-H Delete the character before the cursor (see |i_backspacing| |
| 67 | about joining lines). |
| 68 | See |:fixdel| if your <BS> key does not do what you want. |
| 69 | {Vi: does not delete autoindents} |
| 70 | *i_<Del>* *i_DEL* |
| 71 | <Del> Delete the character under the cursor. If the cursor is at |
| 72 | the end of the line, and the 'backspace' option includes |
| 73 | "eol", delete the <EOL>; the next line is appended after the |
| 74 | current one. |
| 75 | See |:fixdel| if your <Del> key does not do what you want. |
| 76 | {not in Vi} |
| 77 | *i_CTRL-W* |
| 78 | CTRL-W Delete the word before the cursor (see |i_backspacing| about |
| 79 | joining lines). See the section "word motions", |
| 80 | |word-motions|, for the definition of a word. |
| 81 | *i_CTRL-U* |
| 82 | CTRL-U Delete all entered characters in the current line (see |
| 83 | |i_backspacing| about joining lines). |
| 84 | |
| 85 | *i_CTRL-I* *i_<Tab>* *i_Tab* |
| 86 | <Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the |
| 87 | equivalent number of spaces is inserted (use CTRL-V <Tab> to |
| 88 | avoid the expansion; use CTRL-Q <Tab> if CTRL-V is mapped |
| 89 | |i_CTRL-Q|). See also the 'smarttab' option and |
| 90 | |ins-expandtab|. |
| 91 | *i_CTRL-J* *i_<NL>* |
| 92 | <NL> or CTRL-J Begin new line. |
| 93 | *i_CTRL-M* *i_<CR>* |
| 94 | <CR> or CTRL-M Begin new line. |
| 95 | *i_CTRL-K* |
| 96 | CTRL-K {char1} [char2] |
| 97 | Enter digraph (see |digraphs|). When {char1} is a special |
| 98 | key, the code for that key is inserted in <> form. For |
| 99 | example, the string "<S-Space>" can be entered by typing |
| 100 | <C-K><S-Space> (two keys). Neither char is considered for |
| 101 | mapping. {not in Vi} |
| 102 | |
| 103 | CTRL-N Find next keyword (see |i_CTRL-N|). {not in Vi} |
| 104 | CTRL-P Find previous keyword (see |i_CTRL-P|). {not in Vi} |
| 105 | |
| 106 | CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R* |
| 107 | Insert the contents of a register. Between typing CTRL-R and |
| 108 | the second character, '"' will be displayed to indicate that |
| 109 | you are expected to enter the name of a register. |
| 110 | The text is inserted as if you typed it, but mappings and |
| 111 | abbreviations are not used. If you have options like |
| 112 | 'textwidth', 'formatoptions', or 'autoindent' set, this will |
| 113 | influence what will be inserted. This is different from what |
| 114 | happens with the "p" command and pasting with the mouse. |
| 115 | Special registers: |
| 116 | '"' the unnamed register, containing the text of |
| 117 | the last delete or yank |
| 118 | '%' the current file name |
| 119 | '#' the alternate file name |
| 120 | '*' the clipboard contents (X11: primary selection) |
| 121 | '+' the clipboard contents |
| 122 | '/' the last search pattern |
| 123 | ':' the last command-line |
| 124 | '.' the last inserted text |
| 125 | '-' the last small (less than a line) delete |
| 126 | '=' the expression register: you are prompted to |
| 127 | enter an expression (see |expression|) |
Bram Moolenaar | 293ee4d | 2004-12-09 21:34:53 +0000 | [diff] [blame] | 128 | Note that 0x80 (128 decimal) is used for |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 129 | special keys. E.g., you can use this to move |
| 130 | the cursor up: |
| 131 | CTRL-R ="\<Up>" |
| 132 | Use CTRL-R CTRL-R to insert text literally. |
Bram Moolenaar | 362e1a3 | 2006-03-06 23:29:24 +0000 | [diff] [blame] | 133 | When the result is a |List| the items are used |
| 134 | as lines. They can have line breaks inside |
| 135 | too. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 136 | See |registers| about registers. {not in Vi} |
| 137 | |
| 138 | CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R* |
| 139 | Insert the contents of a register. Works like using a single |
| 140 | CTRL-R, but the text is inserted literally, not as if typed. |
| 141 | This differs when the register contains characters like <BS>. |
| 142 | Example, where register a contains "ab^Hc": > |
| 143 | CTRL-R a results in "ac". |
| 144 | CTRL-R CTRL-R a results in "ab^Hc". |
| 145 | < Options 'textwidth', 'formatoptions', etc. still apply. If |
| 146 | you also want to avoid these, use "<C-R><C-O>r", see below. |
| 147 | The '.' register (last inserted text) is still inserted as |
| 148 | typed. {not in Vi} |
| 149 | |
| 150 | CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O* |
| 151 | Insert the contents of a register literally and don't |
| 152 | auto-indent. Does the same as pasting with the mouse |
| 153 | |<MiddleMouse>|. |
| 154 | Does not replace characters! |
| 155 | The '.' register (last inserted text) is still inserted as |
| 156 | typed. {not in Vi} |
| 157 | |
| 158 | CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P* |
| 159 | Insert the contents of a register literally and fix the |
| 160 | indent, like |[<MiddleMouse>|. |
| 161 | Does not replace characters! |
| 162 | The '.' register (last inserted text) is still inserted as |
| 163 | typed. {not in Vi} |
| 164 | |
| 165 | *i_CTRL-T* |
| 166 | CTRL-T Insert one shiftwidth of indent at the start of the current |
| 167 | line. The indent is always rounded to a 'shiftwidth' (this is |
| 168 | vi compatible). {Vi: only when in indent} |
| 169 | *i_CTRL-D* |
| 170 | CTRL-D Delete one shiftwidth of indent at the start of the current |
| 171 | line. The indent is always rounded to a 'shiftwidth' (this is |
| 172 | vi compatible). {Vi: CTRL-D works only when used after |
| 173 | autoindent} |
| 174 | *i_0_CTRL-D* |
| 175 | 0 CTRL-D Delete all indent in the current line. {Vi: CTRL-D works |
| 176 | only when used after autoindent} |
| 177 | *i_^_CTRL-D* |
| 178 | ^ CTRL-D Delete all indent in the current line. The indent is |
| 179 | restored in the next line. This is useful when inserting a |
| 180 | label. {Vi: CTRL-D works only when used after autoindent} |
| 181 | |
| 182 | *i_CTRL-V* |
| 183 | CTRL-V Insert next non-digit literally. For special keys, the |
| 184 | terminal code is inserted. It's also possible to enter the |
| 185 | decimal, octal or hexadecimal value of a character |
| 186 | |i_CTRL-V_digit|. |
| 187 | The characters typed right after CTRL-V are not considered for |
| 188 | mapping. {Vi: no decimal byte entry} |
| 189 | Note: When CTRL-V is mapped (e.g., to paste text) you can |
| 190 | often use CTRL-Q instead |i_CTRL-Q|. |
| 191 | |
| 192 | *i_CTRL-Q* |
| 193 | CTRL-Q Same as CTRL-V. |
| 194 | Note: Some terminal connections may eat CTRL-Q, it doesn't |
| 195 | work then. It does work in the GUI. |
| 196 | |
| 197 | CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can |
Bram Moolenaar | 402d2fe | 2005-04-15 21:00:38 +0000 | [diff] [blame] | 198 | be given to complete words or scroll the window. See |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 199 | |i_CTRL-X| and |ins-completion|. {not in Vi} |
| 200 | |
| 201 | *i_CTRL-E* |
| 202 | CTRL-E Insert the character which is below the cursor. {not in Vi} |
| 203 | *i_CTRL-Y* |
| 204 | CTRL-Y Insert the character which is above the cursor. {not in Vi} |
| 205 | Note that for CTRL-E and CTRL-Y 'textwidth' is not used, to be |
| 206 | able to copy characters from a long line. |
| 207 | |
| 208 | *i_CTRL-_* |
| 209 | CTRL-_ Switch between languages, as follows: |
| 210 | - When in a rightleft window, revins and nohkmap are toggled, |
| 211 | since English will likely be inserted in this case. |
| 212 | - When in a norightleft window, revins and hkmap are toggled, |
| 213 | since Hebrew will likely be inserted in this case. |
| 214 | |
| 215 | CTRL-_ moves the cursor to the end of the typed text. |
| 216 | |
| 217 | This command is only available when the 'allowrevins' option |
| 218 | is set. |
| 219 | Please refer to |rileft.txt| for more information about |
| 220 | right-to-left mode. |
| 221 | {not in Vi} |
| 222 | Only if compiled with the |+rightleft| feature (which is not |
| 223 | the default). |
| 224 | *i_CTRL-^* |
| 225 | CTRL-^ Toggle the use of typing language characters. |
| 226 | When language |:lmap| mappings are defined: |
| 227 | - If 'iminsert' is 1 (langmap mappings used) it becomes 0 (no |
| 228 | langmap mappings used). |
| 229 | - If 'iminsert' has another value it becomes 1, thus langmap |
| 230 | mappings are enabled. |
| 231 | When no language mappings are defined: |
| 232 | - If 'iminsert' is 2 (Input Method used) it becomes 0 (no |
| 233 | Input Method used). |
| 234 | - If 'iminsert' has another value it becomes 2, thus the Input |
| 235 | Method is enabled. |
| 236 | When set to 1, the value of the "b:keymap_name" variable, the |
| 237 | 'keymap' option or "<lang>" appears in the status line. |
| 238 | The language mappings are normally used to type characters |
| 239 | that are different from what the keyboard produces. The |
| 240 | 'keymap' option can be used to install a whole number of them. |
| 241 | {not in Vi} |
| 242 | |
| 243 | *i_CTRL-]* |
| 244 | CTRL-] Trigger abbreviation, without inserting a character. {not in |
| 245 | Vi} |
| 246 | |
| 247 | *i_<Insert>* |
| 248 | <Insert> Toggle between Insert and Replace mode. {not in Vi} |
| 249 | ----------------------------------------------------------------------- |
| 250 | |
| 251 | *i_backspacing* |
| 252 | The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option |
| 253 | (unless 'revins' is set). This is a comma separated list of items: |
| 254 | |
| 255 | item action ~ |
| 256 | indent allow backspacing over autoindent |
| 257 | eol allow backspacing over end-of-line (join lines) |
| 258 | start allow backspacing over the start position of insert; CTRL-W and |
| 259 | CTRL-U stop once at the start position |
| 260 | |
| 261 | When 'backspace' is empty, Vi compatible backspacing is used. You cannot |
| 262 | backspace over autoindent, before column 1 or before where insert started. |
| 263 | |
| 264 | For backwards compatibility the values "0", "1" and "2" are also allowed, see |
| 265 | |'backspace'|. |
| 266 | |
| 267 | If the 'backspace' option does contain "eol" and the cursor is in column 1 |
| 268 | when one of the three keys is used, the current line is joined with the |
| 269 | previous line. This effectively deletes the <EOL> in front of the cursor. |
| 270 | {Vi: does not cross lines, does not delete past start position of insert} |
| 271 | |
| 272 | *i_CTRL-V_digit* |
| 273 | With CTRL-V the decimal, octal or hexadecimal value of a character can be |
| 274 | entered directly. This way you can enter any character, except a line break |
| 275 | (<NL>, value 10). There are five ways to enter the character value: |
| 276 | |
| 277 | first char mode max nr of chars max value ~ |
| 278 | (none) decimal 3 255 |
Bram Moolenaar | 402d2fe | 2005-04-15 21:00:38 +0000 | [diff] [blame] | 279 | o or O octal 3 377 (255) |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 280 | x or X hexadecimal 2 ff (255) |
| 281 | u hexadecimal 4 ffff (65535) |
| 282 | U hexadecimal 8 7fffffff (2147483647) |
| 283 | |
| 284 | Normally you would type the maximum number of characters. Thus to enter a |
| 285 | space (value 32) you would type <C-V>032. You can omit the leading zero, in |
| 286 | which case the character typed after the number must be a non-digit. This |
| 287 | happens for the other modes as well: As soon as you type a character that is |
| 288 | invalid for the mode, the value before it will be used and the "invalid" |
| 289 | character is dealt with in the normal way. |
| 290 | |
| 291 | If you enter a value of 10, it will end up in the file as a 0. The 10 is a |
| 292 | <NL>, which is used internally to represent the <Nul> character. When writing |
| 293 | the buffer to a file, the <NL> character is translated into <Nul>. The <NL> |
| 294 | character is written at the end of each line. Thus if you want to insert a |
| 295 | <NL> character in a file you will have to make a line break. |
| 296 | |
| 297 | *i_CTRL-X* *insert_expand* |
| 298 | CTRL-X enters a sub-mode where several commands can be used. Most of these |
| 299 | commands do keyword completion; see |ins-completion|. These are not available |
| 300 | when Vim was compiled without the |+insert_expand| feature. |
| 301 | |
| 302 | Two commands can be used to scroll the window up or down, without exiting |
| 303 | insert mode: |
| 304 | |
| 305 | *i_CTRL-X_CTRL-E* |
| 306 | CTRL-X CTRL-E scroll window one line up. |
Bram Moolenaar | d2cec5b | 2006-03-28 21:08:56 +0000 | [diff] [blame] | 307 | When doing completion look here: |complete_CTRL-E| |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 308 | |
| 309 | *i_CTRL-X_CTRL-Y* |
| 310 | CTRL-X CTRL-Y scroll window one line down. |
Bram Moolenaar | d2cec5b | 2006-03-28 21:08:56 +0000 | [diff] [blame] | 311 | When doing completion look here: |complete_CTRL-Y| |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 312 | |
| 313 | After CTRL-X is pressed, each CTRL-E (CTRL-Y) scrolls the window up (down) by |
| 314 | one line unless that would cause the cursor to move from its current position |
| 315 | in the file. As soon as another key is pressed, CTRL-X mode is exited and |
| 316 | that key is interpreted as in Insert mode. |
| 317 | |
| 318 | |
| 319 | ============================================================================== |
| 320 | 2. Special special keys *ins-special-special* |
| 321 | |
| 322 | The following keys are special. They stop the current insert, do something, |
| 323 | and then restart insertion. This means you can do something without getting |
| 324 | out of Insert mode. This is very handy if you prefer to use the Insert mode |
| 325 | all the time, just like editors that don't have a separate Normal mode. You |
| 326 | may also want to set the 'backspace' option to "indent,eol,start" and set the |
| 327 | 'insertmode' option. You can use CTRL-O if you want to map a function key to |
| 328 | a command. |
| 329 | |
| 330 | The changes (inserted or deleted characters) before and after these keys can |
| 331 | be undone separately. Only the last change can be redone and always behaves |
| 332 | like an "i" command. |
| 333 | |
| 334 | char action ~ |
| 335 | ----------------------------------------------------------------------- |
| 336 | <Up> cursor one line up *i_<Up>* |
| 337 | <Down> cursor one line down *i_<Down>* |
| 338 | CTRL-G <Up> cursor one line up, insert start column *i_CTRL-G_<Up>* |
| 339 | CTRL-G k cursor one line up, insert start column *i_CTRL-G_k* |
| 340 | CTRL-G CTRL-K cursor one line up, insert start column *i_CTRL-G_CTRL-K* |
| 341 | CTRL-G <Down> cursor one line down, insert start column *i_CTRL-G_<Down>* |
| 342 | CTRL-G j cursor one line down, insert start column *i_CTRL-G_j* |
| 343 | CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J* |
| 344 | <Left> cursor one character left *i_<Left>* |
| 345 | <Right> cursor one character right *i_<Right>* |
| 346 | <S-Left> cursor one word back (like "b" command) *i_<S-Left>* |
| 347 | <C-Left> cursor one word back (like "b" command) *i_<C-Left>* |
| 348 | <S-Right> cursor one word forward (like "w" command) *i_<S-Right>* |
| 349 | <C-Right> cursor one word forward (like "w" command) *i_<C-Right>* |
| 350 | <Home> cursor to first char in the line *i_<Home>* |
| 351 | <End> cursor to after last char in the line *i_<End>* |
| 352 | <C-Home> cursor to first char in the file *i_<C-Home>* |
| 353 | <C-End> cursor to after last char in the file *i_<C-End>* |
| 354 | <LeftMouse> cursor to position of mouse click *i_<LeftMouse>* |
| 355 | <S-Up> move window one page up *i_<S-Up>* |
| 356 | <PageUp> move window one page up *i_<PageUp>* |
| 357 | <S-Down> move window one page down *i_<S-Down>* |
| 358 | <PageDown> move window one page down *i_<PageDown>* |
| 359 | <MouseDown> scroll three lines down *i_<MouseDown>* |
| 360 | <S-MouseDown> scroll a full page down *i_<S-MouseDown>* |
| 361 | <MouseUp> scroll three lines up *i_<MouseUp>* |
| 362 | <S-MouseUp> scroll a full page up *i_<S-MouseUp>* |
| 363 | CTRL-O execute one command, return to Insert mode *i_CTRL-O* |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 364 | CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O* |
Bram Moolenaar | 488c651 | 2005-08-11 20:09:58 +0000 | [diff] [blame] | 365 | CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L* |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 366 | CTRL-G u break undo sequence, start new change *i_CTRL-G_u* |
| 367 | ----------------------------------------------------------------------- |
| 368 | |
| 369 | Note: If the cursor keys take you out of Insert mode, check the 'noesckeys' |
| 370 | option. |
| 371 | |
| 372 | The CTRL-O command sometimes has a side effect: If the cursor was beyond the |
| 373 | end of the line, it will be put on the last character in the line. In |
| 374 | mappings it's often better to use <Esc> (first put an "x" in the text, <Esc> |
Bram Moolenaar | 488c651 | 2005-08-11 20:09:58 +0000 | [diff] [blame] | 375 | will then always put the cursor on it). Or use CTRL-\ CTRL-O, but then |
| 376 | beware of the cursor possibly being beyond the end of the line. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 377 | |
| 378 | The shifted cursor keys are not available on all terminals. |
| 379 | |
| 380 | Another side effect is that a count specified before the "i" or "a" command is |
| 381 | ignored. That is because repeating the effect of the command after CTRL-O is |
| 382 | too complicated. |
| 383 | |
| 384 | An example for using CTRL-G u: > |
| 385 | |
| 386 | :inoremap <C-H> <C-G>u<C-H> |
| 387 | |
| 388 | This redefines the backspace key to start a new undo sequence. You can now |
| 389 | undo the effect of the backspace key, without changing what you typed before |
| 390 | that, with CTRL-O u. |
| 391 | |
Bram Moolenaar | f4b8e57 | 2004-06-24 15:53:16 +0000 | [diff] [blame] | 392 | Using CTRL-O splits undo: the text typed before and after it is undone |
| 393 | separately. If you want to avoid this (e.g., in a mapping) you might be able |
| 394 | to use CTRL-R = |i_CTRL-R|. E.g., to call a function: > |
| 395 | :imap <F2> <C-R>=MyFunc()<CR> |
| 396 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 397 | When the 'whichwrap' option is set appropriately, the <Left> and <Right> |
| 398 | keys on the first/last character in the line make the cursor wrap to the |
| 399 | previous/next line. |
| 400 | |
| 401 | The CTRL-G j and CTRL-G k commands can be used to insert text in front of a |
| 402 | column. Example: > |
| 403 | int i; |
| 404 | int j; |
Bram Moolenaar | 402d2fe | 2005-04-15 21:00:38 +0000 | [diff] [blame] | 405 | Position the cursor on the first "int", type "istatic <C-G>j ". The |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 406 | result is: > |
| 407 | static int i; |
| 408 | int j; |
| 409 | When inserting the same text in front of the column in every line, use the |
| 410 | Visual blockwise command "I" |v_b_I|. |
| 411 | |
| 412 | ============================================================================== |
| 413 | 3. 'textwidth' and 'wrapmargin' options *ins-textwidth* |
| 414 | |
| 415 | The 'textwidth' option can be used to automatically break a line before it |
| 416 | gets too long. Set the 'textwidth' option to the desired maximum line |
| 417 | length. If you then type more characters (not spaces or tabs), the |
| 418 | last word will be put on a new line (unless it is the only word on the |
| 419 | line). If you set 'textwidth' to 0, this feature is disabled. |
| 420 | |
| 421 | The 'wrapmargin' option does almost the same. The difference is that |
| 422 | 'textwidth' has a fixed width while 'wrapmargin' depends on the width of the |
| 423 | screen. When using 'wrapmargin' this is equal to using 'textwidth' with a |
| 424 | value equal to (columns - 'wrapmargin'), where columns is the width of the |
| 425 | screen. |
| 426 | |
| 427 | When 'textwidth' and 'wrapmargin' are both set, 'textwidth' is used. |
| 428 | |
| 429 | If you don't really want to break the line, but view the line wrapped at a |
| 430 | convenient place, see the 'linebreak' option. |
| 431 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 432 | The line is only broken automatically when using Insert mode, or when |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 433 | appending to a line. When in replace mode and the line length is not |
| 434 | changed, the line will not be broken. |
| 435 | |
| 436 | Long lines are broken if you enter a non-white character after the margin. |
| 437 | The situations where a line will be broken can be restricted by adding |
| 438 | characters to the 'formatoptions' option: |
| 439 | "l" Only break a line if it was not longer than 'textwidth' when the insert |
| 440 | started. |
| 441 | "v" Only break at a white character that has been entered during the |
| 442 | current insert command. This is mostly Vi-compatible. |
| 443 | "lv" Only break if the line was not longer than 'textwidth' when the insert |
| 444 | started and only at a white character that has been entered during the |
| 445 | current insert command. Only differs from "l" when entering non-white |
| 446 | characters while crossing the 'textwidth' boundary. |
| 447 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 448 | Normally an internal function will be used to decide where to break the line. |
| 449 | If you want to do it in a different way set the 'formatexpr' option to an |
| 450 | expression that will take care of the line break. |
| 451 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 452 | If you want to format a block of text, you can use the "gq" operator. Type |
| 453 | "gq" and a movement command to move the cursor to the end of the block. In |
| 454 | many cases, the command "gq}" will do what you want (format until the end of |
| 455 | paragraph). Alternatively, you can use "gqap", which will format the whole |
| 456 | paragraph, no matter where the cursor currently is. Or you can use Visual |
| 457 | mode: hit "v", move to the end of the block, and type "gq". See also |gq|. |
| 458 | |
| 459 | ============================================================================== |
| 460 | 4. 'expandtab', 'smarttab' and 'softtabstop' options *ins-expandtab* |
| 461 | |
| 462 | If the 'expandtab' option is on, spaces will be used to fill the amount of |
| 463 | whitespace of the tab. If you want to enter a real <Tab>, type CTRL-V first |
| 464 | (use CTRL-Q when CTRL-V is mapped |i_CTRL-Q|). |
| 465 | The 'expandtab' option is off by default. Note that in Replace mode, a single |
| 466 | character is replaced with several spaces. The result of this is that the |
| 467 | number of characters in the line increases. Backspacing will delete one |
| 468 | space at a time. The original character will be put back for only one space |
| 469 | that you backspace over (the last one). {Vi does not have the 'expandtab' |
| 470 | option} |
| 471 | |
| 472 | *ins-smarttab* |
| 473 | When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at |
| 474 | the beginning of a line and 'tabstop' positions in other places. This means |
| 475 | that often spaces instead of a <Tab> character are inserted. When 'smarttab |
| 476 | is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only |
| 477 | used for ">>" and the like. {not in Vi} |
| 478 | |
| 479 | *ins-softtabstop* |
| 480 | When the 'softtabstop' option is non-zero, a <Tab> inserts 'softtabstop' |
| 481 | positions, and a <BS> used to delete white space, will delete 'softtabstop' |
| 482 | positions. This feels like 'tabstop' was set to 'softtabstop', but a real |
| 483 | <Tab> character still takes 'tabstop' positions, so your file will still look |
| 484 | correct when used by other applications. |
| 485 | |
| 486 | If 'softtabstop' is non-zero, a <BS> will try to delete as much white space to |
| 487 | move to the previous 'softtabstop' position, except when the previously |
| 488 | inserted character is a space, then it will only delete the character before |
| 489 | the cursor. Otherwise you cannot always delete a single character before the |
| 490 | cursor. You will have to delete 'softtabstop' characters first, and then type |
| 491 | extra spaces to get where you want to be. |
| 492 | |
| 493 | ============================================================================== |
| 494 | 5. Replace mode *Replace* *Replace-mode* *mode-replace* |
| 495 | |
| 496 | Enter Replace mode with the "R" command in normal mode. |
| 497 | |
| 498 | In Replace mode, one character in the line is deleted for every character you |
| 499 | type. If there is no character to delete (at the end of the line), the |
| 500 | typed character is appended (as in Insert mode). Thus the number of |
| 501 | characters in a line stays the same until you get to the end of the line. |
| 502 | If a <NL> is typed, a line break is inserted and no character is deleted. |
| 503 | |
| 504 | Be careful with <Tab> characters. If you type a normal printing character in |
| 505 | its place, the number of characters is still the same, but the number of |
| 506 | columns will become smaller. |
| 507 | |
| 508 | If you delete characters in Replace mode (with <BS>, CTRL-W, or CTRL-U), what |
| 509 | happens is that you delete the changes. The characters that were replaced |
| 510 | are restored. If you had typed past the existing text, the characters you |
| 511 | added are deleted. This is effectively a character-at-a-time undo. |
| 512 | |
| 513 | If the 'expandtab' option is on, a <Tab> will replace one character with |
| 514 | several spaces. The result of this is that the number of characters in the |
| 515 | line increases. Backspacing will delete one space at a time. The original |
| 516 | character will be put back for only one space that you backspace over (the |
| 517 | last one). {Vi does not have the 'expandtab' option} |
| 518 | |
| 519 | ============================================================================== |
| 520 | 6. Virtual Replace mode *vreplace-mode* *Virtual-Replace-mode* |
| 521 | |
| 522 | Enter Virtual Replace mode with the "gR" command in normal mode. |
| 523 | {not available when compiled without the +vreplace feature} |
| 524 | {Vi does not have Virtual Replace mode} |
| 525 | |
| 526 | Virtual Replace mode is similar to Replace mode, but instead of replacing |
| 527 | actual characters in the file, you are replacing screen real estate, so that |
| 528 | characters further on in the file never appear to move. |
| 529 | |
| 530 | So if you type a <Tab> it may replace several normal characters, and if you |
| 531 | type a letter on top of a <Tab> it may not replace anything at all, since the |
| 532 | <Tab> will still line up to the same place as before. |
| 533 | |
| 534 | Typing a <NL> still doesn't cause characters later in the file to appear to |
| 535 | move. The rest of the current line will be replaced by the <NL> (that is, |
| 536 | they are deleted), and replacing continues on the next line. A new line is |
| 537 | NOT inserted unless you go past the end of the file. |
| 538 | |
| 539 | Interesting effects are seen when using CTRL-T and CTRL-D. The characters |
| 540 | before the cursor are shifted sideways as normal, but characters later in the |
| 541 | line still remain still. CTRL-T will hide some of the old line under the |
| 542 | shifted characters, but CTRL-D will reveal them again. |
| 543 | |
| 544 | As with Replace mode, using <BS> etc will bring back the characters that were |
| 545 | replaced. This still works in conjunction with 'smartindent', CTRL-T and |
| 546 | CTRL-D, 'expandtab', 'smarttab', 'softtabstop', etc. |
| 547 | |
| 548 | In 'list' mode, Virtual Replace mode acts as if it was not in 'list' mode, |
| 549 | unless "L" is in 'cpoptions'. |
| 550 | |
| 551 | Note that the only times characters beyond the cursor should appear to move |
| 552 | are in 'list' mode, and occasionally when 'wrap' is set (and the line changes |
| 553 | length to become shorter or wider than the width of the screen), or |
| 554 | momentarily when typing over a CTRL character. A CTRL character takes up two |
| 555 | screen spaces. When replacing it with two normal characters, the first will |
| 556 | be inserted and the second will replace the CTRL character. |
| 557 | |
| 558 | This mode is very useful for editing <Tab> separated columns in tables, for |
| 559 | entering new data while keeping all the columns aligned. |
| 560 | |
| 561 | ============================================================================== |
| 562 | 7. Insert mode completion *ins-completion* |
| 563 | |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 564 | In Insert and Replace mode, there are several commands to complete part of a |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 565 | keyword or line that has been typed. This is useful if you are using |
| 566 | complicated keywords (e.g., function names with capitals and underscores). |
| 567 | |
| 568 | These commands are not available when the |+insert_expand| feature was |
| 569 | disabled at compile time. |
| 570 | |
| 571 | Completion can be done for: |
| 572 | |
| 573 | 1. Whole lines |i_CTRL-X_CTRL-L| |
| 574 | 2. keywords in the current file |i_CTRL-X_CTRL-N| |
| 575 | 3. keywords in 'dictionary' |i_CTRL-X_CTRL-K| |
| 576 | 4. keywords in 'thesaurus', thesaurus-style |i_CTRL-X_CTRL-T| |
| 577 | 5. keywords in the current and included files |i_CTRL-X_CTRL-I| |
| 578 | 6. tags |i_CTRL-X_CTRL-]| |
| 579 | 7. file names |i_CTRL-X_CTRL-F| |
| 580 | 8. definitions or macros |i_CTRL-X_CTRL-D| |
| 581 | 9. Vim command-line |i_CTRL-X_CTRL-V| |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 582 | 10. User defined completion |i_CTRL-X_CTRL-U| |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 583 | 11. omni completion |i_CTRL-X_CTRL-O| |
Bram Moolenaar | 488c651 | 2005-08-11 20:09:58 +0000 | [diff] [blame] | 584 | 12. Spelling suggestions |i_CTRL-X_s| |
| 585 | 13. keywords in 'complete' |i_CTRL-N| |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 586 | |
| 587 | All these (except 2) are done in CTRL-X mode. This is a sub-mode of Insert |
| 588 | and Replace modes. You enter CTRL-X mode by typing CTRL-X and one of the |
| 589 | CTRL-X commands. You exit CTRL-X mode by typing a key that is not a valid |
| 590 | CTRL-X mode command. Valid keys are the CTRL-X command itself, CTRL-N (next), |
| 591 | and CTRL-P (previous). |
| 592 | |
| 593 | Also see the 'infercase' option if you want to adjust the case of the match. |
| 594 | |
Bram Moolenaar | d2cec5b | 2006-03-28 21:08:56 +0000 | [diff] [blame] | 595 | *complete_CTRL-E* |
| 596 | When completion is active you can use CTRL-E to stop it and go back to the |
| 597 | orignally typed text. The CTRL-E will not be inserted. |
| 598 | |
| 599 | *complete_CTRL-Y* |
| 600 | When the popup menu is displayed you can use CTRL-Y to stop completion and |
| 601 | accept the currently selected entry. The CTRL-Y is not inserted. Typing a |
| 602 | space, Enter, or some other unprintable character will leave completion mode |
| 603 | and insert that typed character. |
| 604 | |
Bram Moolenaar | 9e54a0e | 2006-04-14 20:42:25 +0000 | [diff] [blame] | 605 | When the popup menu is displayed there are a few more special keys, see |
| 606 | |popupmenu-keys|. |
| 607 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 608 | Note: The keys that are valid in CTRL-X mode are not mapped. This allows for |
| 609 | ":map ^F ^X^F" to work (where ^F is CTRL-F and ^X is CTRL-X). The key that |
| 610 | ends CTRL-X mode (any key that is not a valid CTRL-X mode command) is mapped. |
| 611 | Also, when doing completion with 'complete' mappings apply as usual. |
| 612 | |
| 613 | The following mappings are suggested to make typing the completion commands |
| 614 | a bit easier (although they will hide other commands): > |
| 615 | :inoremap ^] ^X^] |
| 616 | :inoremap ^F ^X^F |
| 617 | :inoremap ^D ^X^D |
| 618 | :inoremap ^L ^X^L |
| 619 | |
| 620 | As a special case, typing CTRL-R to perform register insertion (see |
| 621 | |i_CTRL-R|) will not exit CTRL-X mode. This is primarily to allow the use of |
| 622 | the '=' register to call some function to determine the next operation. If |
| 623 | the contents of the register (or result of the '=' register evaluation) are |
| 624 | not valid CTRL-X mode keys, then CTRL-X mode will be exited as if those keys |
| 625 | had been typed. |
| 626 | |
| 627 | For example, the following will map <Tab> to either actually insert a <Tab> if |
| 628 | the current line is currently only whitespace, or start/continue a CTRL-N |
| 629 | completion operation: > |
| 630 | |
| 631 | function! CleverTab() |
| 632 | if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' |
| 633 | return "\<Tab>" |
| 634 | else |
| 635 | return "\<C-N>" |
| 636 | endfunction |
| 637 | inoremap <Tab> <C-R>=CleverTab()<CR> |
| 638 | |
| 639 | |
| 640 | |
| 641 | Completing whole lines *compl-whole-line* |
| 642 | |
| 643 | *i_CTRL-X_CTRL-L* |
| 644 | CTRL-X CTRL-L Search backwards for a line that starts with the |
Bram Moolenaar | 83bab71 | 2005-08-01 21:58:57 +0000 | [diff] [blame] | 645 | same characters as those in the current line before |
| 646 | the cursor. Indent is ignored. The matching line is |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 647 | inserted in front of the cursor. |
Bram Moolenaar | 83bab71 | 2005-08-01 21:58:57 +0000 | [diff] [blame] | 648 | The 'complete' option is used to decide which buffers |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 649 | are searched for a match. Both loaded and unloaded |
| 650 | buffers are used. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 651 | CTRL-L or |
| 652 | CTRL-P Search backwards for next matching line. This line |
| 653 | replaces the previous matching line. |
| 654 | |
| 655 | CTRL-N Search forward for next matching line. This line |
| 656 | replaces the previous matching line. |
| 657 | |
| 658 | CTRL-X CTRL-L After expanding a line you can additionally get the |
| 659 | line next to it by typing CTRL-X CTRL-L again, unless |
| 660 | a double CTRL-X is used. |
| 661 | |
| 662 | Completing keywords in current file *compl-current* |
| 663 | |
| 664 | *i_CTRL-X_CTRL-P* |
| 665 | *i_CTRL-X_CTRL-N* |
| 666 | CTRL-X CTRL-N Search forwards for words that start with the keyword |
| 667 | in front of the cursor. The found keyword is inserted |
| 668 | in front of the cursor. |
| 669 | |
| 670 | CTRL-X CTRL-P Search backwards for words that start with the keyword |
| 671 | in front of the cursor. The found keyword is inserted |
| 672 | in front of the cursor. |
| 673 | |
| 674 | CTRL-N Search forward for next matching keyword. This |
| 675 | keyword replaces the previous matching keyword. |
| 676 | |
| 677 | CTRL-P Search backwards for next matching keyword. This |
| 678 | keyword replaces the previous matching keyword. |
| 679 | |
| 680 | CTRL-X CTRL-N or |
| 681 | CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will |
| 682 | copy the words following the previous expansion in |
| 683 | other contexts unless a double CTRL-X is used. |
| 684 | |
| 685 | If there is a keyword in front of the cursor (a name made out of alphabetic |
| 686 | characters and characters in 'iskeyword'), it is used as the search pattern, |
| 687 | with "\<" prepended (meaning: start of a word). Otherwise "\<\k\k" is used |
| 688 | as search pattern (start of any keyword of at least two characters). |
| 689 | |
| 690 | In Replace mode, the number of characters that are replaced depends on the |
| 691 | length of the matched string. This works like typing the characters of the |
| 692 | matched string in Replace mode. |
| 693 | |
| 694 | If there is not a valid keyword character before the cursor, any keyword of |
| 695 | at least two characters is matched. |
| 696 | e.g., to get: |
| 697 | printf("(%g, %g, %g)", vector[0], vector[1], vector[2]); |
| 698 | just type: |
| 699 | printf("(%g, %g, %g)", vector[0], ^P[1], ^P[2]); |
| 700 | |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 701 | The search wraps around the end of the file, the value of 'wrapscan' is not |
| 702 | used here. |
| 703 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 704 | Multiple repeats of the same completion are skipped; thus a different match |
| 705 | will be inserted at each CTRL-N and CTRL-P (unless there is only one |
| 706 | matching keyword). |
| 707 | |
| 708 | Single character matches are never included, as they usually just get in |
| 709 | the way of what you were really after. |
| 710 | e.g., to get: |
| 711 | printf("name = %s\n", name); |
| 712 | just type: |
| 713 | printf("name = %s\n", n^P); |
| 714 | or even: |
| 715 | printf("name = %s\n", ^P); |
| 716 | The 'n' in '\n' is skipped. |
| 717 | |
| 718 | After expanding a word, you can use CTRL-X CTRL-P or CTRL-X CTRL-N to get the |
| 719 | word following the expansion in other contexts. These sequences search for |
| 720 | the text just expanded and further expand by getting an extra word. This is |
| 721 | useful if you need to repeat a sequence of complicated words. Although CTRL-P |
| 722 | and CTRL-N look just for strings of at least two characters, CTRL-X CTRL-P and |
| 723 | CTRL-X CTRL-N can be used to expand words of just one character. |
| 724 | e.g., to get: |
| 725 | México |
| 726 | you can type: |
| 727 | M^N^P^X^P^X^P |
| 728 | CTRL-N starts the expansion and then CTRL-P takes back the single character |
| 729 | "M", the next two CTRL-X CTRL-P's get the words "é" and ";xico". |
| 730 | |
| 731 | If the previous expansion was split, because it got longer than 'textwidth', |
| 732 | then just the text in the current line will be used. |
| 733 | |
| 734 | If the match found is at the end of a line, then the first word in the next |
| 735 | line will be inserted and the message "word from next line" displayed, if |
| 736 | this word is accepted the next CTRL-X CTRL-P or CTRL-X CTRL-N will search |
| 737 | for those lines starting with this word. |
| 738 | |
| 739 | |
| 740 | Completing keywords in 'dictionary' *compl-dictionary* |
| 741 | |
| 742 | *i_CTRL-X_CTRL-K* |
| 743 | CTRL-X CTRL-K Search the files given with the 'dictionary' option |
| 744 | for words that start with the keyword in front of the |
| 745 | cursor. This is like CTRL-N, but only the dictionary |
| 746 | files are searched, not the current file. The found |
| 747 | keyword is inserted in front of the cursor. This |
| 748 | could potentially be pretty slow, since all matches |
| 749 | are found before the first match is used. By default, |
| 750 | the 'dictionary' option is empty. |
| 751 | For suggestions where to find a list of words, see the |
| 752 | 'dictionary' option. |
| 753 | |
| 754 | CTRL-K or |
| 755 | CTRL-N Search forward for next matching keyword. This |
| 756 | keyword replaces the previous matching keyword. |
| 757 | |
| 758 | CTRL-P Search backwards for next matching keyword. This |
| 759 | keyword replaces the previous matching keyword. |
| 760 | |
| 761 | *i_CTRL-X_CTRL-T* |
Bram Moolenaar | 402d2fe | 2005-04-15 21:00:38 +0000 | [diff] [blame] | 762 | CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 763 | the 'thesaurus' option instead of 'dictionary'. If a |
| 764 | match is found in the thesaurus file, all the |
| 765 | remaining words on the same line are included as |
| 766 | matches, even though they don't complete the word. |
| 767 | Thus a word can be completely replaced. |
| 768 | |
| 769 | For an example, imagine the 'thesaurus' file has a |
| 770 | line like this: > |
| 771 | angry furious mad enraged |
| 772 | < Placing the cursor after the letters "ang" and typing |
| 773 | CTRL-X CTRL-T would complete the word "angry"; |
| 774 | subsequent presses would change the word to "furious", |
| 775 | "mad" etc. |
| 776 | Other uses include translation between two languages, |
| 777 | or grouping API functions by keyword. |
| 778 | |
| 779 | CTRL-T or |
| 780 | CTRL-N Search forward for next matching keyword. This |
| 781 | keyword replaces the previous matching keyword. |
| 782 | |
| 783 | CTRL-P Search backwards for next matching keyword. This |
| 784 | keyword replaces the previous matching keyword. |
| 785 | |
| 786 | |
| 787 | Completing keywords in the current and included files *compl-keyword* |
| 788 | |
| 789 | The 'include' option is used to specify a line that contains an include file |
| 790 | name. The 'path' option is used to search for include files. |
| 791 | |
| 792 | *i_CTRL-X_CTRL-I* |
| 793 | CTRL-X CTRL-I Search for the first keyword in the current and |
| 794 | included files that starts with the same characters |
| 795 | as those before the cursor. The matched keyword is |
| 796 | inserted in front of the cursor. |
| 797 | |
| 798 | CTRL-N Search forwards for next matching keyword. This |
| 799 | keyword replaces the previous matching keyword. |
| 800 | Note: CTRL-I is the same as <Tab>, which is likely to |
| 801 | be typed after a successful completion, therefore |
| 802 | CTRL-I is not used for searching for the next match. |
| 803 | |
| 804 | CTRL-P Search backward for previous matching keyword. This |
| 805 | keyword replaces the previous matching keyword. |
| 806 | |
| 807 | CTRL-X CTRL-I Further use of CTRL-X CTRL-I will copy the words |
| 808 | following the previous expansion in other contexts |
| 809 | unless a double CTRL-X is used. |
| 810 | |
| 811 | Completing tags *compl-tag* |
| 812 | *i_CTRL-X_CTRL-]* |
| 813 | CTRL-X CTRL-] Search for the first tag that starts with the same |
| 814 | characters as before the cursor. The matching tag is |
| 815 | inserted in front of the cursor. Alphabetic |
| 816 | characters and characters in 'iskeyword' are used |
| 817 | to decide which characters are included in the tag |
| 818 | name (same as for a keyword). See also |CTRL-]|. |
| 819 | The 'showfulltag' option can be used to add context |
| 820 | from around the tag definition. |
| 821 | CTRL-] or |
| 822 | CTRL-N Search forwards for next matching tag. This tag |
| 823 | replaces the previous matching tag. |
| 824 | |
| 825 | CTRL-P Search backward for previous matching tag. This tag |
| 826 | replaces the previous matching tag. |
| 827 | |
| 828 | |
| 829 | Completing file names *compl-filename* |
| 830 | *i_CTRL-X_CTRL-F* |
| 831 | CTRL-X CTRL-F Search for the first file name that starts with the |
| 832 | same characters as before the cursor. The matching |
| 833 | file name is inserted in front of the cursor. |
| 834 | Alphabetic characters and characters in 'isfname' |
| 835 | are used to decide which characters are included in |
| 836 | the file name. Note: the 'path' option is not used |
| 837 | here (yet). |
| 838 | CTRL-F or |
| 839 | CTRL-N Search forwards for next matching file name. This |
| 840 | file name replaces the previous matching file name. |
| 841 | |
| 842 | CTRL-P Search backward for previous matching file name. |
| 843 | This file name replaces the previous matching file |
| 844 | name. |
| 845 | |
| 846 | |
| 847 | Completing definitions or macros *compl-define* |
| 848 | |
| 849 | The 'define' option is used to specify a line that contains a definition. |
| 850 | The 'include' option is used to specify a line that contains an include file |
| 851 | name. The 'path' option is used to search for include files. |
| 852 | |
| 853 | *i_CTRL-X_CTRL-D* |
| 854 | CTRL-X CTRL-D Search in the current and included files for the |
| 855 | first definition (or macro) name that starts with |
| 856 | the same characters as before the cursor. The found |
| 857 | definition name is inserted in front of the cursor. |
| 858 | CTRL-D or |
| 859 | CTRL-N Search forwards for next matching macro name. This |
| 860 | macro name replaces the previous matching macro |
| 861 | name. |
| 862 | |
| 863 | CTRL-P Search backward for previous matching macro name. |
| 864 | This macro name replaces the previous matching macro |
| 865 | name. |
| 866 | |
| 867 | CTRL-X CTRL-D Further use of CTRL-X CTRL-D will copy the words |
| 868 | following the previous expansion in other contexts |
| 869 | unless a double CTRL-X is used. |
| 870 | |
| 871 | |
| 872 | Completing Vim commands *compl-vim* |
| 873 | |
| 874 | Completion is context-sensitive. It works like on the Command-line. It |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 875 | completes an Ex command as well as its arguments. This is useful when writing |
| 876 | a Vim script. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 877 | |
| 878 | *i_CTRL-X_CTRL-V* |
| 879 | CTRL-X CTRL-V Guess what kind of item is in front of the cursor and |
| 880 | find the first match for it. |
| 881 | Note: When CTRL-V is mapped you can often use CTRL-Q |
| 882 | instead |i_CTRL-Q|. |
| 883 | CTRL-V or |
| 884 | CTRL-N Search forwards for next match. This match replaces |
| 885 | the previous one. |
| 886 | |
| 887 | CTRL-P Search backward for previous match. This match |
| 888 | replaces the previous one. |
| 889 | |
| 890 | CTRL-X CTRL-V Further use of CTRL-X CTRL-V will do the same as |
| 891 | CTRL-V. This allows mapping a key to do Vim command |
| 892 | completion, for example: > |
| 893 | :imap <Tab> <C-X><C-V> |
| 894 | |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 895 | User defined completion *compl-function* |
Bram Moolenaar | cfbc5ee | 2004-07-02 15:38:35 +0000 | [diff] [blame] | 896 | |
| 897 | Completion is done by a function that can be defined by the user with the |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 898 | 'completefunc' option. See below for how the function is called and an |
| 899 | example |complete-functions|. |
Bram Moolenaar | cfbc5ee | 2004-07-02 15:38:35 +0000 | [diff] [blame] | 900 | |
| 901 | *i_CTRL-X_CTRL-U* |
| 902 | CTRL-X CTRL-U Guess what kind of item is in front of the cursor and |
| 903 | find the first match for it. |
| 904 | CTRL-U or |
| 905 | CTRL-N Use the next match. This match replaces the previous |
| 906 | one. |
| 907 | |
| 908 | CTRL-P Use the previous match. This match replaces the |
| 909 | previous one. |
| 910 | |
| 911 | |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 912 | Omni completion *compl-omni* |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 913 | |
Bram Moolenaar | e344bea | 2005-09-01 20:46:49 +0000 | [diff] [blame] | 914 | Completion is done by a function that can be defined by the user with the |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 915 | 'omnifunc' option. This is to be used for filetype-specific completion. |
Bram Moolenaar | e344bea | 2005-09-01 20:46:49 +0000 | [diff] [blame] | 916 | |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 917 | See below for how the function is called and an example |complete-functions|. |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 918 | For remarks about specific filetypes see |compl-omni-filetypes|. |
Bram Moolenaar | 4be06f9 | 2005-07-29 22:36:03 +0000 | [diff] [blame] | 919 | |
| 920 | *i_CTRL-X_CTRL-O* |
| 921 | CTRL-X CTRL-O Guess what kind of item is in front of the cursor and |
| 922 | find the first match for it. |
| 923 | CTRL-O or |
| 924 | CTRL-N Use the next match. This match replaces the previous |
| 925 | one. |
| 926 | |
| 927 | CTRL-P Use the previous match. This match replaces the |
| 928 | previous one. |
| 929 | |
| 930 | |
Bram Moolenaar | 488c651 | 2005-08-11 20:09:58 +0000 | [diff] [blame] | 931 | Spelling suggestions *compl-spelling* |
| 932 | |
Bram Moolenaar | 5195e45 | 2005-08-19 20:32:47 +0000 | [diff] [blame] | 933 | A word before or at the cursor is located and correctly spelled words are |
| 934 | suggested to replace it. If there is a badly spelled word in the line, before |
| 935 | or under the cursor, the cursor is moved to after it. Otherwise the word just |
| 936 | before the cursor is used for suggestions, even though it isn't badly spelled. |
| 937 | |
Bram Moolenaar | 488c651 | 2005-08-11 20:09:58 +0000 | [diff] [blame] | 938 | NOTE: CTRL-S suspends display in many Unix terminals. Use 's' instead. Type |
| 939 | CTRL-Q to resume displaying. |
| 940 | |
| 941 | *i_CTRL-X_CTRL-S* *i_CTRL-X_s* |
| 942 | CTRL-X CTRL-S or |
| 943 | CTRL-X s Locate the word in front of the cursor and find the |
| 944 | first spell suggestion for it. |
| 945 | CTRL-S or |
| 946 | CTRL-N Use the next suggestion. This replaces the previous |
| 947 | one. Note that you can't use 's' here. |
| 948 | |
| 949 | CTRL-P Use the previous suggestion. This replaces the |
| 950 | previous one. |
| 951 | |
| 952 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 953 | Completing keywords from different sources *compl-generic* |
| 954 | |
| 955 | *i_CTRL-N* |
| 956 | CTRL-N Find next match for words that start with the |
| 957 | keyword in front of the cursor, looking in places |
| 958 | specified with the 'complete' option. The found |
| 959 | keyword is inserted in front of the cursor. |
| 960 | |
| 961 | *i_CTRL-P* |
| 962 | CTRL-P Find previous match for words that start with the |
| 963 | keyword in front of the cursor, looking in places |
| 964 | specified with the 'complete' option. The found |
| 965 | keyword is inserted in front of the cursor. |
| 966 | |
| 967 | CTRL-N Search forward for next matching keyword. This |
| 968 | keyword replaces the previous matching keyword. |
| 969 | |
| 970 | CTRL-P Search backwards for next matching keyword. This |
| 971 | keyword replaces the previous matching keyword. |
| 972 | |
| 973 | CTRL-X CTRL-N or |
| 974 | CTRL-X CTRL-P Further use of CTRL-X CTRL-N or CTRL-X CTRL-P will |
| 975 | copy the words following the previous expansion in |
| 976 | other contexts unless a double CTRL-X is used. |
| 977 | |
Bram Moolenaar | 578b49e | 2005-09-10 19:22:57 +0000 | [diff] [blame] | 978 | |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 979 | FUNCTIONS FOR FINDING COMPLETIONS *complete-functions* |
| 980 | |
| 981 | This applies to 'completefunc' and 'omnifunc'. |
| 982 | |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 983 | The function is called in two different ways: |
| 984 | - First the function is called to find the start of the text to be completed. |
| 985 | - Later the function is called to actually find the matches. |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 986 | |
| 987 | On the first invocation the arguments are: |
| 988 | a:findstart 1 |
| 989 | a:base empty |
| 990 | |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 991 | The function must return the column where the completion starts. It must be a |
| 992 | number between zero and the cursor column "col('.')". This involves looking |
| 993 | at the characters just before the cursor and including those characters that |
| 994 | could be part of the completed item. The text between this column and the |
| 995 | cursor column will be replaced with the matches. Return -1 if no completion |
| 996 | can be done. |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 997 | |
| 998 | On the second invocation the arguments are: |
| 999 | a:findstart 0 |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1000 | a:base the text with which matches should match; the text that was |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 1001 | located in the first call (can be empty) |
| 1002 | |
| 1003 | The function must return a List with the matching words. These matches |
| 1004 | usually include the "a:base" text. When there are no matches return an empty |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1005 | List. |
Bram Moolenaar | 5c4bab0 | 2006-03-10 21:37:46 +0000 | [diff] [blame] | 1006 | *complete-items* |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1007 | Each list item can either be a string or a Dictionary. When it is a string it |
| 1008 | is used as the completion. When it is a Dictionary it can contain these |
| 1009 | items: |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1010 | word the text that will be inserted, mandatory |
| 1011 | abbr abbreviation of "word"; when not empty it is used in |
| 1012 | the menu instead of "word" |
Bram Moolenaar | 8dff818 | 2006-04-06 20:18:50 +0000 | [diff] [blame] | 1013 | menu extra text for the popup menu, displayed after "word" |
| 1014 | or "abbr" |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1015 | info more information about the item, can be displayed in a |
| 1016 | preview window |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1017 | kind single letter indicating the type of completion |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1018 | icase when non-zero case is to be ignored; when omitted |
Bram Moolenaar | d1f56e6 | 2006-02-22 21:25:37 +0000 | [diff] [blame] | 1019 | the 'ignorecase' option is used |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1020 | |
Bram Moolenaar | d1f56e6 | 2006-02-22 21:25:37 +0000 | [diff] [blame] | 1021 | All of these except 'icase' must be a string. If an item does not meet these |
| 1022 | requirements then an error message is given and further items in the list are |
| 1023 | not used. You can mix string and Dictionary items in the returned list. |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1024 | |
| 1025 | The "menu" item is used in the popup menu and may be truncated, thus it should |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1026 | be relatively short. The "info" item can be longer, it will be displayed in |
| 1027 | the preview window when "preview" appears in 'completeopt'. The "info" item |
| 1028 | will also remain displayed after the popup menu has been removed. This is |
| 1029 | useful for function arguments. |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1030 | |
| 1031 | The "kind" item uses a single letter to indicate the kind of completion. This |
| 1032 | may be used to show the completion differently (different color or icon). |
| 1033 | Currently these types can be used: |
| 1034 | v variable |
| 1035 | f function or method |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1036 | m member of a struct or class |
| 1037 | t typedef |
| 1038 | d #define or macro |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 1039 | |
| 1040 | When searching for matches takes some time call |complete_add()| to add each |
| 1041 | match to the total list. These matches should then not appear in the returned |
| 1042 | list! Call |complete_check()| now and then to allow the user to press a key |
| 1043 | while still searching for matches. Stop searching when it returns non-zero. |
| 1044 | |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1045 | The function is allowed to move the cursor, it is restored afterwards. This |
| 1046 | option cannot be set from a |modeline| or in the |sandbox|, for security |
| 1047 | reasons. |
Bram Moolenaar | 280f126 | 2006-01-30 00:14:18 +0000 | [diff] [blame] | 1048 | |
| 1049 | An example that completes the names of the months: > |
| 1050 | fun! CompleteMonths(findstart, base) |
| 1051 | if a:findstart |
| 1052 | " locate the start of the word |
| 1053 | let line = getline('.') |
| 1054 | let start = col('.') - 1 |
| 1055 | while start > 0 && line[start - 1] =~ '\a' |
| 1056 | let start -= 1 |
| 1057 | endwhile |
| 1058 | return start |
| 1059 | else |
| 1060 | " find months matching with "a:base" |
| 1061 | let res = [] |
| 1062 | for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") |
| 1063 | if m =~ '^' . a:base |
| 1064 | call add(res, m) |
| 1065 | endif |
| 1066 | endfor |
| 1067 | return res |
| 1068 | endif |
| 1069 | endfun |
| 1070 | set completefunc=CompleteMonths |
| 1071 | < |
| 1072 | The same, but now pretending searching for matches is slow: > |
| 1073 | fun! CompleteMonths(findstart, base) |
| 1074 | if a:findstart |
| 1075 | " locate the start of the word |
| 1076 | let line = getline('.') |
| 1077 | let start = col('.') - 1 |
| 1078 | while start > 0 && line[start - 1] =~ '\a' |
| 1079 | let start -= 1 |
| 1080 | endwhile |
| 1081 | return start |
| 1082 | else |
| 1083 | " find months matching with "a:base" |
| 1084 | for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") |
| 1085 | if m =~ '^' . a:base |
| 1086 | call complete_add(m) |
| 1087 | endif |
| 1088 | sleep 300m " simulate searching for next match |
| 1089 | if complete_check() |
| 1090 | break |
| 1091 | endif |
| 1092 | endfor |
| 1093 | return [] |
| 1094 | endif |
| 1095 | endfun |
| 1096 | set completefunc=CompleteMonths |
| 1097 | < |
| 1098 | |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1099 | INSERT COMPLETION POPUP MENU *ins-completion-menu* |
Bram Moolenaar | ebefac6 | 2005-12-28 22:39:57 +0000 | [diff] [blame] | 1100 | *popupmenu-completion* |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1101 | Vim can display the matches in a simplistic popup menu. |
| 1102 | |
| 1103 | The menu is used when: |
Bram Moolenaar | a203182 | 2006-03-07 22:29:51 +0000 | [diff] [blame] | 1104 | - The 'completeopt' option contains "menu" or "menuone". |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1105 | - The terminal supports at least 8 colors. |
Bram Moolenaar | c1e3790 | 2006-04-18 21:55:01 +0000 | [diff] [blame] | 1106 | - There are at least two matches. One of "menuone" is used. |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1107 | |
Bram Moolenaar | 5671873 | 2006-03-15 22:53:57 +0000 | [diff] [blame] | 1108 | The 'pumheight' option can be used to set a maximum height. The default is to |
| 1109 | use all space available. |
| 1110 | |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1111 | There are three states: |
| 1112 | 1. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P. |
| 1113 | 2. A cursor key has been used to select another match. The match was not |
| 1114 | inserted then, only the entry in the popup menu is highlighted. |
| 1115 | 3. Only part of a match has been inserted and characters were typed or the |
| 1116 | backspace key was used. The list of matches was then adjusted for what is |
| 1117 | in front of the cursor. |
Bram Moolenaar | c7453f5 | 2006-02-10 23:20:28 +0000 | [diff] [blame] | 1118 | |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1119 | You normally start in the first state, with the first match being inserted. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1120 | When "longest" is in 'completeopt' and there is more than one match you start |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1121 | in the third state. |
Bram Moolenaar | c7453f5 | 2006-02-10 23:20:28 +0000 | [diff] [blame] | 1122 | |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1123 | If you select another match, e.g., with CTRL-N or CTRL-P, you go to the first |
| 1124 | state. This doesn't change the list of matches. |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1125 | |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1126 | When you are back at the original text then you are in the third state. To |
Bram Moolenaar | a203182 | 2006-03-07 22:29:51 +0000 | [diff] [blame] | 1127 | get there right away you can use a mapping that uses CTRL-P right after |
| 1128 | starting the completion: > |
| 1129 | :imap <F7> <C-N><C-P> |
Bram Moolenaar | 76916e6 | 2006-03-21 21:23:25 +0000 | [diff] [blame] | 1130 | < |
| 1131 | *popupmenu-keys* |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1132 | In the first state these keys have a special meaning: |
| 1133 | <BS> and CTRL-H Delete one character, find the matches for the word before |
| 1134 | the cursor. This reduces the list of matches, often to one |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1135 | entry, and switches to the second state. |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1136 | Any non-special character: |
| 1137 | Stop completion without changing the match and insert the |
| 1138 | typed character. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1139 | |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1140 | In the second and third state these keys have a special meaning: |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1141 | <BS> and CTRL-H Delete one character, find the matches for the shorter word |
| 1142 | before the cursor. This may find more matches. |
| 1143 | CTRL-L Add one character from the current match, may reduce the |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1144 | number of matches. |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1145 | any printable, non-white character: |
| 1146 | Add this character and reduce the number of matches. |
Bram Moolenaar | c7453f5 | 2006-02-10 23:20:28 +0000 | [diff] [blame] | 1147 | |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1148 | In all three states these can be used: |
Bram Moolenaar | d2cec5b | 2006-03-28 21:08:56 +0000 | [diff] [blame] | 1149 | CTRL-Y Yes: Accept the currently selected match and stop completion. |
| 1150 | CTRL-E End completion, go back to what was typed. |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1151 | <PageUp> Select a match several entries back, but don't insert it. |
| 1152 | <PageDown> Select a match several entries further, but don't insert it. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1153 | <Up> Select the previous match, as if CTRL-P was used, but don't |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1154 | insert it. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1155 | <Down> Select the next match, as if CTRL-N was used, but don't |
Bram Moolenaar | 80a94a5 | 2006-02-23 21:26:58 +0000 | [diff] [blame] | 1156 | insert it. |
Bram Moolenaar | 779b74b | 2006-04-10 14:55:34 +0000 | [diff] [blame] | 1157 | space or <Tab> Stop completion without changing the match and insert the |
| 1158 | typed character. |
| 1159 | |
| 1160 | The behavior of the Enter key depends on the state you are in: |
| 1161 | first state: Use the text as it is and insert a line break. |
| 1162 | second state: Insert the currently selected match. |
| 1163 | third state: Use the text as it is and insert a line break. |
| 1164 | |
| 1165 | In other words: If you used the cursor keys to select another entry in the |
| 1166 | list of matches then the Enter key inserts that match. If you typed something |
| 1167 | else then Enter inserts a line break. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1168 | |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1169 | |
| 1170 | The colors of the menu can be changed with these highlight groups: |
| 1171 | Pmenu normal item |hl-Pmenu| |
| 1172 | PmenuSel selected item |hl-PmenuSel| |
| 1173 | PmenuSbar scrollbar |hl-PmenuSbar| |
| 1174 | PmenuThumb thumb of the scrollbar |hl-PmenuThumb| |
| 1175 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1176 | There are no special mappings for when the popup menu is visible. However, |
| 1177 | you can use an Insert mode mapping that checks the |pumvisible()| function to |
| 1178 | do something different. Example: > |
| 1179 | :inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR> |
Bram Moolenaar | 1c7715d | 2005-10-03 22:02:18 +0000 | [diff] [blame] | 1180 | |
Bram Moolenaar | 5c4bab0 | 2006-03-10 21:37:46 +0000 | [diff] [blame] | 1181 | You can use of <expr> in mapping to have the popup menu used when typing a |
| 1182 | character and some condition is met. For example, for typing a dot: > |
| 1183 | inoremap <expr> . MayComplete() |
| 1184 | func MayComplete() |
| 1185 | if (can complete) |
| 1186 | return ".\<C-X>\<C-O>" |
| 1187 | endif |
| 1188 | return '.' |
| 1189 | endfunc |
| 1190 | |
| 1191 | See |:map-<expr>| for more info. |
| 1192 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1193 | |
| 1194 | FILETYPE-SPECIFIC REMARKS FOR OMNI COMPLETION *compl-omni-filetypes* |
| 1195 | |
| 1196 | The file used for {filetype} should be autoload/{filetype}complete.vim |
| 1197 | in 'runtimepath'. Thus for "java" it is autoload/javacomplete.vim. |
Bram Moolenaar | 578b49e | 2005-09-10 19:22:57 +0000 | [diff] [blame] | 1198 | |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1199 | |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 1200 | C *ft-c-omni* |
Bram Moolenaar | 578b49e | 2005-09-10 19:22:57 +0000 | [diff] [blame] | 1201 | |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 1202 | Completion of C code requires a tags file. You should use Exuberant ctags, |
| 1203 | because it adds extra information that is needed for completion. You can find |
| 1204 | it here: http://ctags.sourceforge.net/ |
| 1205 | For version 5.5.4 you should add a patch that adds the "typename:" field: |
Bram Moolenaar | 36fc535 | 2006-03-04 21:49:37 +0000 | [diff] [blame] | 1206 | ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1207 | A compiled .exe for MS-Windows can be found at: |
Bram Moolenaar | 36fc535 | 2006-03-04 21:49:37 +0000 | [diff] [blame] | 1208 | http://georgevreilly.com/vim/ctags.html |
Bram Moolenaar | 578b49e | 2005-09-10 19:22:57 +0000 | [diff] [blame] | 1209 | |
| 1210 | If you want to complete system functions you can do something like this. Use |
| 1211 | ctags to generate a tags file for all the system header files: > |
| 1212 | % ctags -R -f ~/.vim/systags /usr/include /usr/local/include |
| 1213 | In your vimrc file add this tags file to the 'tags' option: > |
| 1214 | set tags+=~/.vim/systags |
| 1215 | |
| 1216 | When using CTRL-X CTRL-O after a name without any "." or "->" it is completed |
| 1217 | from the tags file directly. This works for any identifier, also function |
| 1218 | names. If you want to complete a local variable name, which does not appear |
| 1219 | in the tags file, use CTRL-P instead. |
| 1220 | |
| 1221 | When using CTRL-X CTRL-O after something that has "." or "->" Vim will attempt |
| 1222 | to recognize the type of the variable and figure out what members it has. |
| 1223 | This means only members valid for the variable will be listed. |
| 1224 | |
Bram Moolenaar | f75a963 | 2005-09-13 21:20:47 +0000 | [diff] [blame] | 1225 | When a member name already was complete, CTRL-X CTRL-O will add a "." or |
| 1226 | "->" for composite types. |
| 1227 | |
Bram Moolenaar | 578b49e | 2005-09-10 19:22:57 +0000 | [diff] [blame] | 1228 | Vim doesn't include a C compiler, only the most obviously formatted |
| 1229 | declarations are recognized. Preprocessor stuff may cause confusion. |
| 1230 | When the same structure name appears in multiple places all possible members |
| 1231 | are included. |
| 1232 | |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1233 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1234 | CSS *ft-css-omni* |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1235 | |
| 1236 | Complete properties and their appropriate values according to CSS 2.1 |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1237 | specification. |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1238 | |
| 1239 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1240 | HTML *ft-html-omni* |
| 1241 | XHTML *ft-xhtml-omni* |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1242 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1243 | CTRL-X CTRL-O provides completion of various elements of (X)HTML files. It is |
| 1244 | designed to support writing of XHTML 1.0 Strict files but will also works for |
| 1245 | other versions of HTML. Features: |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1246 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1247 | - after "<" complete tag name depending on context (no div suggestion inside |
| 1248 | of an a tag); '/>' indicates empty tags |
| 1249 | - inside of tag complete proper attributes (no width attribute for an a tag); |
| 1250 | show also type of attribute; '*' indicates required attributes |
| 1251 | - when attribute has limited number of possible values help to complete them |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1252 | - complete names of entities |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1253 | - complete values of "class" and "id" attributes with data obtained from |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1254 | <style> tag and included CSS files |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1255 | - when completing value of "style" attribute or working inside of "style" tag |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1256 | switch to |ft-css-omni| completion |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1257 | - when completing values of events attributes or working inside of "script" |
| 1258 | tag switch to |ft-javascript-omni| completion |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1259 | - when used after "</" CTRL-X CTRL-O will close the last opened tag |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1260 | |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1261 | Note: When used first time completion menu will be shown with little delay |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1262 | - this is time needed for loading of data file. |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1263 | Note: Completion may fail in badly formatted documents. In such case try to |
| 1264 | run |:make| command to detect formatting problems. |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1265 | |
| 1266 | |
Bram Moolenaar | c1e3790 | 2006-04-18 21:55:01 +0000 | [diff] [blame] | 1267 | HTML flavor *html-flavor* |
| 1268 | |
| 1269 | By default HTML completion provides completion for XHTML 1.0 Strict. This is |
| 1270 | not the only HTML version. To use another data file and still have benefits of |
| 1271 | custom completion for class, style, etc. attributes set g:html_omni_flavor |
| 1272 | variable. Example (in .vimrc or filetype plugin file): > |
| 1273 | |
| 1274 | let g:html_omni_flavor = 'xhtml10t' |
| 1275 | |
| 1276 | Data for HTML completion will be read from 'autoload/xml/xhtml10t.vim' file |
| 1277 | located somewhere in 'runtimepath' (not in default distribution). |
| 1278 | |
| 1279 | More about format of data file in |xml-omni-datafile|. Some of data files may |
| 1280 | in future be found on vim-online site (|www|). |
| 1281 | |
| 1282 | Note that g:html_omni_flavor may point to file with any XML data. This makes |
| 1283 | possible to mix PHP (|ft-php-omni|) completion with whatever XML dialect |
| 1284 | (assuming you have data file for it). |
| 1285 | |
| 1286 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1287 | JAVASCRIPT *ft-javascript-omni* |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1288 | |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1289 | Completion of most elements of JavaScript language and DOM elements. |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1290 | |
| 1291 | Complete: |
| 1292 | |
| 1293 | - variables |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1294 | - function name; show function arguments |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1295 | - function arguments |
| 1296 | - properties of variables trying to detect type of variable |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1297 | - complete DOM objects and properties depending on context |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1298 | - keywords of language |
| 1299 | |
Bram Moolenaar | 8b6144b | 2006-02-08 09:20:24 +0000 | [diff] [blame] | 1300 | Completion works in separate JavaScript files (&ft==javascript), inside of |
| 1301 | <script> tag of (X)HTML and in values of event attributes (including scanning |
| 1302 | of external files. |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1303 | |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1304 | DOM compatibility |
| 1305 | |
| 1306 | At the moment (beginning of 2006) there are two main browsers - MS Internet |
| 1307 | Explorer and Mozilla Firefox. These two applications are covering over 90% of |
| 1308 | market. Theoretically standards are created by W3C organisation |
| 1309 | (http://www.w3c.org) but they are not always followed/implemented. |
| 1310 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1311 | IE FF W3C Omni completion ~ |
| 1312 | +/- +/- + + ~ |
| 1313 | + + - + ~ |
| 1314 | + - - - ~ |
| 1315 | - + - - ~ |
Bram Moolenaar | b8a7b56 | 2006-02-01 21:47:16 +0000 | [diff] [blame] | 1316 | |
| 1317 | Regardless from state of implementation in browsers but if element is defined |
| 1318 | in standards, completion plugin will place element in suggestion list. When |
| 1319 | both major engines implemented element, even if this is not in standards it |
| 1320 | will be suggested. All other elements are not placed in suggestion list. |
| 1321 | |
| 1322 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1323 | PHP *ft-php-omni* |
Bram Moolenaar | 362e1a3 | 2006-03-06 23:29:24 +0000 | [diff] [blame] | 1324 | |
| 1325 | Completion of PHP code requires tags file for completion of data from external |
| 1326 | files. You should use Exuberant ctags version 5.5.4 or newer. You can find it |
| 1327 | here: http://ctags.sourceforge.net/ |
| 1328 | |
| 1329 | Script completes: |
| 1330 | |
| 1331 | - after $ variables name |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1332 | - if variable was declared as object add "->", if tags file is available show |
| 1333 | name of class |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1334 | - after "->" complete only function and variable names specific for given |
| 1335 | class. To find class location and contents tags file is required. Because |
| 1336 | PHP isn't strongly typed language user can use @var tag to declare class: > |
| 1337 | |
| 1338 | /* @var $myVar myClass */ |
| 1339 | $myVar-> |
| 1340 | < |
| 1341 | Still, to find myClass contents tags file is required. |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1342 | |
Bram Moolenaar | 362e1a3 | 2006-03-06 23:29:24 +0000 | [diff] [blame] | 1343 | - function names with additonal info: |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1344 | - in case of built-in functions list of possible arguments and after | type |
| 1345 | data returned by function |
| 1346 | - in case of user function arguments and name of file were function was |
| 1347 | defined (if it is not current file) |
| 1348 | |
| 1349 | - constants names |
| 1350 | - class names after "new" declaration |
| 1351 | |
Bram Moolenaar | 362e1a3 | 2006-03-06 23:29:24 +0000 | [diff] [blame] | 1352 | |
| 1353 | Note: when doing completion first time Vim will load all necessary data into |
| 1354 | memory. It may take several seconds. After next use of completion delay |
Bram Moolenaar | 0b598c2 | 2006-03-11 21:22:53 +0000 | [diff] [blame] | 1355 | should not be noticeable. |
Bram Moolenaar | 362e1a3 | 2006-03-06 23:29:24 +0000 | [diff] [blame] | 1356 | |
| 1357 | Script detects if cursor is inside <?php ?> tags. If it is outside it will |
| 1358 | automatically switch to HTML/CSS/JavaScript completion. Note: contrary to |
| 1359 | original HTML files completion of tags (and only tags) isn't context aware. |
| 1360 | |
| 1361 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1362 | SYNTAX *ft-syntax-omni* |
| 1363 | |
| 1364 | This uses the current syntax highlighting for completion. It can be used for |
| 1365 | any filetype and provides a minimal language-sensitive completion. |
| 1366 | |
Bram Moolenaar | c06ac34 | 2006-03-02 22:43:39 +0000 | [diff] [blame] | 1367 | To enable syntax code completion you can run: > |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1368 | setlocal omnifunc=syntaxcomplete#Complete |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1369 | |
Bram Moolenaar | c06ac34 | 2006-03-02 22:43:39 +0000 | [diff] [blame] | 1370 | You can automate this by placing the following in your vimrc (after any |
| 1371 | ":filetype" command): > |
| 1372 | if has("autocmd") && exists("+omnifunc") |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1373 | autocmd Filetype * |
| 1374 | \ if &omnifunc == "" | |
| 1375 | \ setlocal omnifunc=syntaxcomplete#Complete | |
| 1376 | \ endif |
Bram Moolenaar | c06ac34 | 2006-03-02 22:43:39 +0000 | [diff] [blame] | 1377 | endif |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1378 | |
Bram Moolenaar | c06ac34 | 2006-03-02 22:43:39 +0000 | [diff] [blame] | 1379 | The above will set completion to this script only if a specific plugin does |
| 1380 | not already exist for that filetype. |
| 1381 | |
| 1382 | Each filetype can have a wide range of syntax items. The plugin allows you to |
| 1383 | customize which syntax groups to include or exclude from the list. Let's have |
| 1384 | a look at the PHP filetype to see how this works. |
| 1385 | |
| 1386 | If you edit a file called, index.php, run the following command: > |
| 1387 | :syntax list |
| 1388 | |
| 1389 | First thing you will notice is there are many different syntax groups. The |
| 1390 | PHP language can include elements from different languages like HTML, |
| 1391 | JavaScript and many more. The syntax plugin will only include syntax groups |
| 1392 | that begin with the filetype, "php", in this case. For example these syntax |
| 1393 | groups are included by default with the PHP: phpEnvVar, phpIntVar, |
| 1394 | phpFunctions. |
| 1395 | |
| 1396 | The PHP language has an enormous number of items which it knows how to syntax |
| 1397 | highlight. This means these items will be available within the omni |
| 1398 | completion list. Some people may find this list unwieldy or are only |
| 1399 | interested in certain items. |
| 1400 | |
| 1401 | There are two ways to prune this list (if necessary). If you find certain |
| 1402 | syntax groups you do not wish displayed you can add the following to your |
| 1403 | vimrc: > |
| 1404 | let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant' |
| 1405 | |
| 1406 | Add as many syntax groups to this list by comma separating them. The basic |
| 1407 | form of this variable is: > |
| 1408 | let g:omni_syntax_group_exclude_{filetype} = 'comma,separated,list' |
| 1409 | |
| 1410 | For completeness the opposite is also true. Creating this variable in your |
| 1411 | vimrc will only include the items in the phpFunctions and phpMethods syntax |
| 1412 | groups: > |
| 1413 | let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods' |
| 1414 | |
| 1415 | You can create as many of these variables as you need, varying only the |
| 1416 | filetype at the end of the variable name. |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1417 | |
| 1418 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1419 | SQL *ft-sql-omni* |
| 1420 | |
| 1421 | Completion for the SQL language includes statements, functions, keywords. |
| 1422 | It will also dynamically complete tables, procedures, views and column lists |
| 1423 | with data pulled directly from within a database. For detailed instructions |
| 1424 | and a tutorial see |omni-sql-completion|. |
| 1425 | |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1426 | The SQL completion plugin can be used in conjunction with other completion |
| 1427 | plugins. For example, the PHP filetype has it's own completion plugin. |
| 1428 | Since PHP is often used to generate dynamic website by accessing a database, |
| 1429 | the SQL completion plugin can also be enabled. This allows you to complete |
| 1430 | PHP code and SQL code at the same time. |
| 1431 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1432 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1433 | XML *ft-xml-omni* |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1434 | |
Bram Moolenaar | 5b962cf | 2005-12-12 21:58:40 +0000 | [diff] [blame] | 1435 | Vim 7 provides mechanism to context aware completion of XML files. It depends |
| 1436 | on special |xml-omni-datafile| and two commands: |:XMLns| and |:XMLent|. |
| 1437 | Features are: |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1438 | |
| 1439 | - after "<" complete tag name depending on context (no div suggest |
| 1440 | inside of an a tag) |
| 1441 | - inside of tag complete proper attributes (no width attribute for an |
| 1442 | a tag) |
| 1443 | - when attribute has limited number of possible values help to complete |
| 1444 | them |
Bram Moolenaar | 4c3f536 | 2006-04-11 21:38:50 +0000 | [diff] [blame] | 1445 | - complete names of entities (defined in |xml-omni-datafile| and in current |
| 1446 | file with "<!ENTITY" declarations |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1447 | - when used after "</" CTRL-X CTRL-O will close the last opened tag |
| 1448 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1449 | Format of XML data file *xml-omni-datafile* |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1450 | |
| 1451 | Vim distribution provides two data files as examples (xhtml10s.vim, xsl.vim) |
| 1452 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1453 | XML data files are stored in "autoload/xml" directory in 'runtimepath'. They |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1454 | have meaningful name which will be used in commands. It should be unique name |
| 1455 | which will not create conflicts in future. For example name xhtml10s.vim means |
| 1456 | it is data file for XHTML 1.0 Strict. |
| 1457 | |
| 1458 | File contains one variable with fixed name: g:xmldata_xhtml10s . It is |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1459 | compound from two parts: |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1460 | |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1461 | 1. "g:xmldata_" general prefix |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1462 | 2. "xhtml10s" name of file and name of described XML dialect |
| 1463 | |
| 1464 | Part two must be exactly the same as name of file. |
| 1465 | |
| 1466 | Variable is data structure in form of |Dictionary|. Keys are tag names and |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1467 | values are two element |List|. First element of List is also List with names |
| 1468 | of possible children, second element is |Dictionary| with names of attributes |
| 1469 | as keys and possible values of attributes as values. Example: > |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1470 | |
| 1471 | let g:xmldata_crippledhtml = { |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1472 | \ "html": |
| 1473 | \ [ ["body", "head"], {"id": [], "xmlns": ["http://www.w3.org/1999/xhtml"], |
| 1474 | \ "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}], |
| 1475 | \ "script": |
| 1476 | \ [ [], {"id": [], "charset": [], "type": ["text/javascript"], "src": [], |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1477 | \ "defer": ["BOOL"], "xml:space": ["preserve"]}], |
Bram Moolenaar | e2f98b9 | 2006-03-29 21:18:24 +0000 | [diff] [blame] | 1478 | \ "meta": |
| 1479 | \ [ [], {"id": [], "http-equiv": [], "name": [], "content": [], "scheme": |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1480 | \ [], "lang": [], "xml:lang": [], "dir": ["ltr", "rtl"]}] |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1481 | \ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"]}, |
| 1482 | \ "vimxmltaginfo": { |
| 1483 | \ 'meta': ['/>', '']}, |
| 1484 | \ "vimxmlattrinfo": { |
| 1485 | \ 'http-equiv': ['ContentType', '']} |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1486 | |
| 1487 | This example should be put in "autoload/xml/crippledhtml.vim" file. |
| 1488 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1489 | In example are visible four special elements: |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1490 | |
| 1491 | 1. "vimxmlentities" - special key with List containing entities of this XML |
| 1492 | dialect. |
| 1493 | 2. "BOOL" - value of attribute key showing if attribute should be inserted |
| 1494 | bare ("defer" vs. 'defer="'). It can be the only element of List of |
| 1495 | attribute values. |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1496 | 3. "vimxmltaginfo" - special key with dictionary containing as key tag names, |
| 1497 | as value two element List for additional menu info and long description. |
| 1498 | 4. "vimxmlattrinfo" - special key with dictionary containing as key attribute |
| 1499 | names, as value two element List for additional menu info and long |
| 1500 | description. |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1501 | |
Bram Moolenaar | c1e3790 | 2006-04-18 21:55:01 +0000 | [diff] [blame] | 1502 | Note: Tag names in data file MUST not contain namespace description. Check |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1503 | xsl.vim for example. |
| 1504 | |
Bram Moolenaar | 1d2ba7f | 2006-02-14 22:29:30 +0000 | [diff] [blame] | 1505 | |
Bram Moolenaar | c1e3790 | 2006-04-18 21:55:01 +0000 | [diff] [blame] | 1506 | DTD -> Vim *dtd2vim* |
| 1507 | |
| 1508 | On |www| is script |dtd2vim| which parses DTD and creates XML data file |
| 1509 | for Vim XML omni completion. |
| 1510 | |
| 1511 | dtd2vim: http://www.vim.org/scripts/script.php?script_id=1462 |
| 1512 | |
| 1513 | Check there and beginning of file for details of usage. |
| 1514 | Script requires perl and: |
| 1515 | |
| 1516 | perlSGML: http://savannah.nongnu.org/projects/perlsgml |
| 1517 | |
| 1518 | |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1519 | Commands |
| 1520 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1521 | :XMLns {name} [{namespace}] *:XMLns* |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1522 | |
| 1523 | Vim has to know which data file should be used and with which namespace. For |
| 1524 | loading of data file and connecting data with prope namespace use |:XMLns| |
| 1525 | command. First (obligatory) argument is name of data (xhtml10s, xsl). Second |
| 1526 | argument is code of namespace (h, xsl). When used without second argument |
| 1527 | dialect will be used as default - without namespace declaration. For example |
| 1528 | to use XML completion in .xsl files: > |
| 1529 | |
| 1530 | :XMLns xhtml10s |
| 1531 | :XMLns xsl xsl |
| 1532 | |
| 1533 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1534 | :XMLent {name} *:XMLent* |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1535 | |
| 1536 | By default entities will be completed from data file of default |
| 1537 | namespace. XMLent command should be used in case when there is no |
| 1538 | default namespace: > |
| 1539 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1540 | :XMLent xhtml10s |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1541 | |
| 1542 | Usage |
| 1543 | |
| 1544 | While used in situation (after declarations from previous part, | is |
| 1545 | cursor position): > |
| 1546 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1547 | <| |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1548 | |
| 1549 | Will complete to appropriate XHTML tag, and in this situation: > |
| 1550 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1551 | <xsl:| |
Bram Moolenaar | a5792f5 | 2005-11-23 21:25:05 +0000 | [diff] [blame] | 1552 | |
| 1553 | Will complete to appropriate XSL tag. |
| 1554 | |
| 1555 | File xmlcomplete.vim provides through |autoload| mechanism |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1556 | GetLastOpenTag function which can be used in XML files to get name of |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1557 | last open tag with (b:unaryTagsStack has to be defined): > |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1558 | |
Bram Moolenaar | 4770d09 | 2006-01-12 23:22:24 +0000 | [diff] [blame] | 1559 | :echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack") |
Bram Moolenaar | bfd8fc0 | 2005-09-20 23:22:24 +0000 | [diff] [blame] | 1560 | |
Bram Moolenaar | 6b730e1 | 2005-09-16 21:47:57 +0000 | [diff] [blame] | 1561 | |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1562 | |
Bram Moolenaar | 1e01546 | 2005-09-25 22:16:38 +0000 | [diff] [blame] | 1563 | |
| 1564 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1565 | ============================================================================== |
| 1566 | 8. Insert mode commands *inserting* |
| 1567 | |
| 1568 | The following commands can be used to insert new text into the buffer. They |
| 1569 | can all be undone and repeated with the "." command. |
| 1570 | |
| 1571 | *a* |
| 1572 | a Append text after the cursor [count] times. If the |
| 1573 | cursor is in the first column of an empty line Insert |
| 1574 | starts there. But not when 'virtualedit' is set! |
| 1575 | |
| 1576 | *A* |
| 1577 | A Append text at the end of the line [count] times. |
| 1578 | |
| 1579 | <insert> or *i* *insert* *<Insert>* |
| 1580 | i Insert text before the cursor [count] times. |
| 1581 | When using CTRL-O in Insert mode |i_CTRL-O| the count |
| 1582 | is not supported. |
| 1583 | |
| 1584 | *I* |
| 1585 | I Insert text before the first non-blank in the line |
| 1586 | [count] times. |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 1587 | When the 'H' flag is present in 'cpoptions' and the |
| 1588 | line only contains blanks, insert start just before |
| 1589 | the last blank. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1590 | |
| 1591 | *gI* |
| 1592 | gI Insert text in column 1 [count] times. {not in Vi} |
| 1593 | |
| 1594 | *gi* |
| 1595 | gi Insert text in the same position as where Insert mode |
| 1596 | was stopped last time in the current buffer. |
| 1597 | This uses the |'^| mark. It's different from "`^i" |
| 1598 | when the mark is past the end of the line. |
| 1599 | The position is corrected for inserted/deleted lines, |
| 1600 | but NOT for inserted/deleted characters. |
| 1601 | When the |:keepjumps| command modifier is used the |'^| |
Bram Moolenaar | 69a7cb4 | 2004-06-20 12:51:53 +0000 | [diff] [blame] | 1602 | mark won't be changed. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1603 | {not in Vi} |
| 1604 | |
| 1605 | *o* |
| 1606 | o Begin a new line below the cursor and insert text, |
| 1607 | repeat [count] times. {Vi: blank [count] screen |
| 1608 | lines} |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 1609 | When the '#' flag is in 'cpoptions' the count is |
| 1610 | ignored. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1611 | |
| 1612 | *O* |
| 1613 | O Begin a new line above the cursor and insert text, |
| 1614 | repeat [count] times. {Vi: blank [count] screen |
| 1615 | lines} |
Bram Moolenaar | 4399ef4 | 2005-02-12 14:29:27 +0000 | [diff] [blame] | 1616 | When the '#' flag is in 'cpoptions' the count is |
| 1617 | ignored. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1618 | |
| 1619 | These commands are used to start inserting text. You can end insert mode with |
| 1620 | <Esc>. See |mode-ins-repl| for the other special characters in Insert mode. |
| 1621 | The effect of [count] takes place after Insert mode is exited. |
| 1622 | |
| 1623 | When 'autoindent' is on, the indent for a new line is obtained from the |
| 1624 | previous line. When 'smartindent' or 'cindent' is on, the indent for a line |
| 1625 | is automatically adjusted for C programs. |
| 1626 | |
| 1627 | 'textwidth' can be set to the maximum width for a line. When a line becomes |
| 1628 | too long when appending characters a line break is automatically inserted. |
| 1629 | |
| 1630 | |
| 1631 | ============================================================================== |
| 1632 | 9. Ex insert commands *inserting-ex* |
| 1633 | |
| 1634 | *:a* *:append* |
Bram Moolenaar | df177f6 | 2005-02-22 08:39:57 +0000 | [diff] [blame] | 1635 | :{range}a[ppend][!] Insert several lines of text below the specified |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1636 | line. If the {range} is missing, the text will be |
| 1637 | inserted after the current line. |
Bram Moolenaar | df177f6 | 2005-02-22 08:39:57 +0000 | [diff] [blame] | 1638 | Adding [!] toggles 'autoindent' for the time this |
| 1639 | command is executed. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1640 | |
| 1641 | *:i* *:in* *:insert* |
Bram Moolenaar | df177f6 | 2005-02-22 08:39:57 +0000 | [diff] [blame] | 1642 | :{range}i[nsert][!] Insert several lines of text above the specified |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1643 | line. If the {range} is missing, the text will be |
| 1644 | inserted before the current line. |
Bram Moolenaar | df177f6 | 2005-02-22 08:39:57 +0000 | [diff] [blame] | 1645 | Adding [!] toggles 'autoindent' for the time this |
| 1646 | command is executed. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1647 | |
| 1648 | These two commands will keep on asking for lines, until you type a line |
| 1649 | containing only a ".". Watch out for lines starting with a backslash, see |
| 1650 | |line-continuation|. |
Bram Moolenaar | df177f6 | 2005-02-22 08:39:57 +0000 | [diff] [blame] | 1651 | When these commands are used with |:global| or |:vglobal| then the lines are |
| 1652 | obtained from the text following the command. Separate lines with a NL |
| 1653 | escaped with a backslash: > |
| 1654 | :global/abc/insert\ |
| 1655 | one line\ |
| 1656 | another line |
| 1657 | The final "." is not needed then. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1658 | NOTE: ":append" and ":insert" don't work properly in between ":if" and |
Bram Moolenaar | 06fb435 | 2005-01-05 22:10:30 +0000 | [diff] [blame] | 1659 | ":endif", ":for" and ":endfor", ":while" and ":endwhile". |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1660 | |
| 1661 | *:start* *:startinsert* |
| 1662 | :star[tinsert][!] Start Insert mode just after executing this command. |
| 1663 | Works like typing "i" in Normal mode. When the ! is |
| 1664 | included it works like "A", append to the line. |
| 1665 | Otherwise insertion starts at the cursor position. |
| 1666 | Note that when using this command in a function or |
| 1667 | script, the insertion only starts after the function |
| 1668 | or script is finished. |
Bram Moolenaar | 87e25fd | 2005-07-27 21:13:01 +0000 | [diff] [blame] | 1669 | This command does not work from |:normal|. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1670 | {not in Vi} |
| 1671 | {not available when compiled without the +ex_extra |
| 1672 | feature} |
| 1673 | |
| 1674 | *:stopi* *:stopinsert* |
| 1675 | :stopi[nsert] Stop Insert mode as soon as possible. Works like |
| 1676 | typing <Esc> in Insert mode. |
| 1677 | Can be used in an autocommand, example: > |
| 1678 | :au BufEnter scratch stopinsert |
Bram Moolenaar | 325b7a2 | 2004-07-05 15:58:32 +0000 | [diff] [blame] | 1679 | < |
| 1680 | *replacing-ex* *:startreplace* |
| 1681 | :startr[eplace][!] Start Replace mode just after executing this command. |
| 1682 | Works just like typing "R" in Normal mode. When the |
| 1683 | ! is included it acts just like "$R" had been typed |
| 1684 | (ie. begin replace mode at the end-of-line). Other- |
| 1685 | wise replacement begins at the cursor position. |
| 1686 | Note that when using this command in a function or |
| 1687 | script that the replacement will only start after |
| 1688 | the function or script is finished. |
| 1689 | {not in Vi} |
| 1690 | {not available when compiled without the +ex_extra |
| 1691 | feature} |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1692 | |
Bram Moolenaar | 61da498 | 2005-12-14 22:02:18 +0000 | [diff] [blame] | 1693 | *:startgreplace* |
| 1694 | :startg[replace][!] Just like |:startreplace|, but use Virtual Replace |
| 1695 | mode, like with |gR|. |
| 1696 | {not in Vi} |
| 1697 | {not available when compiled without the +ex_extra |
| 1698 | feature} |
| 1699 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1700 | ============================================================================== |
| 1701 | 10. Inserting a file *inserting-file* |
| 1702 | |
| 1703 | *:r* *:re* *:read* |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1704 | :r[ead] [++opt] [name] |
| 1705 | Insert the file [name] (default: current file) below |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1706 | the cursor. |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1707 | See |++opt| for the possible values of [++opt]. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1708 | |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1709 | :{range}r[ead] [++opt] [name] |
| 1710 | Insert the file [name] (default: current file) below |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1711 | the specified line. |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1712 | See |++opt| for the possible values of [++opt]. |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1713 | |
| 1714 | *:r!* *:read!* |
| 1715 | :r[ead] !{cmd} Execute {cmd} and insert its standard output below |
| 1716 | the cursor. A temporary file is used to store the |
| 1717 | output of the command which is then read into the |
| 1718 | buffer. 'shellredir' is used to save the output of |
| 1719 | the command, which can be set to include stderr or |
| 1720 | not. {cmd} is executed like with ":!{cmd}", any '!' |
| 1721 | is replaced with the previous command |:!|. |
| 1722 | |
| 1723 | These commands insert the contents of a file, or the output of a command, |
| 1724 | into the buffer. They can be undone. They cannot be repeated with the "." |
| 1725 | command. They work on a line basis, insertion starts below the line in which |
| 1726 | the cursor is, or below the specified line. To insert text above the first |
| 1727 | line use the command ":0r {name}". |
| 1728 | |
| 1729 | After the ":read" command, the cursor is left on the first non-blank in the |
| 1730 | first new line. Unless in Ex mode, then the cursor is left on the last new |
| 1731 | line (sorry, this is Vi compatible). |
| 1732 | |
| 1733 | If a file name is given with ":r", it becomes the alternate file. This can be |
| 1734 | used, for example, when you want to edit that file instead: ":e! #". This can |
| 1735 | be switched off by removing the 'a' flag from the 'cpoptions' option. |
| 1736 | |
Bram Moolenaar | 910f66f | 2006-04-05 20:41:53 +0000 | [diff] [blame] | 1737 | Of the [++opt] arguments one is specifically for ":read", the ++edit argument. |
| 1738 | This is useful when the ":read" command is actually used to read a file into |
| 1739 | the buffer as if editing that file. Use this command in an empty buffer: > |
| 1740 | :read ++edit filename |
| 1741 | The effect is that the 'fileformat', 'fileencoding', 'bomb', etc. options are |
| 1742 | set to what has been detected for "filename". Note that a single empty line |
| 1743 | remains, you may want to delete it. |
| 1744 | |
Bram Moolenaar | 071d427 | 2004-06-13 20:20:40 +0000 | [diff] [blame] | 1745 | *file-read* |
| 1746 | The 'fileformat' option sets the <EOL> style for a file: |
| 1747 | 'fileformat' characters name ~ |
| 1748 | "dos" <CR><NL> or <NL> DOS format |
| 1749 | "unix" <NL> Unix format |
| 1750 | "mac" <CR> Mac format |
| 1751 | Previously 'textmode' was used. It is obsolete now. |
| 1752 | |
| 1753 | If 'fileformat' is "dos", a <CR> in front of an <NL> is ignored and a CTRL-Z |
| 1754 | at the end of the file is ignored. |
| 1755 | |
| 1756 | If 'fileformat' is "mac", a <NL> in the file is internally represented by a |
| 1757 | <CR>. This is to avoid confusion with a <NL> which is used to represent a |
| 1758 | <NUL>. See |CR-used-for-NL|. |
| 1759 | |
| 1760 | If the 'fileformats' option is not empty Vim tries to recognize the type of |
| 1761 | <EOL> (see |file-formats|). However, the 'fileformat' option will not be |
| 1762 | changed, the detected format is only used while reading the file. |
| 1763 | A similar thing happens with 'fileencodings'. |
| 1764 | |
| 1765 | On non-MS-DOS, Win32, and OS/2 systems the message "[dos format]" is shown if |
| 1766 | a file is read in DOS format, to remind you that something unusual is done. |
| 1767 | On Macintosh, MS-DOS, Win32, and OS/2 the message "[unix format]" is shown if |
| 1768 | a file is read in Unix format. |
| 1769 | On non-Macintosh systems, the message "[Mac format]" is shown if a file is |
| 1770 | read in Mac format. |
| 1771 | |
| 1772 | An example on how to use ":r !": > |
| 1773 | :r !uuencode binfile binfile |
| 1774 | This command reads "binfile", uuencodes it and reads it into the current |
| 1775 | buffer. Useful when you are editing e-mail and want to include a binary |
| 1776 | file. |
| 1777 | |
| 1778 | *read-messages* |
| 1779 | When reading a file Vim will display a message with information about the read |
| 1780 | file. In the table is an explanation for some of the items. The others are |
| 1781 | self explanatory. Using the long or the short version depends on the |
| 1782 | 'shortmess' option. |
| 1783 | |
| 1784 | long short meaning ~ |
| 1785 | [readonly] {RO} the file is write protected |
| 1786 | [fifo/socket] using a stream |
| 1787 | [fifo] using a fifo stream |
| 1788 | [socket] using a socket stream |
| 1789 | [CR missing] reading with "dos" 'fileformat' and a |
| 1790 | NL without a preceding CR was found. |
| 1791 | [NL found] reading with "mac" 'fileformat' and a |
| 1792 | NL was found (could be "unix" format) |
| 1793 | [long lines split] at least one line was split in two |
| 1794 | [NOT converted] conversion from 'fileencoding' to |
| 1795 | 'encoding' was desired but not |
| 1796 | possible |
| 1797 | [converted] conversion from 'fileencoding' to |
| 1798 | 'encoding' done |
| 1799 | [crypted] file was decrypted |
| 1800 | [READ ERRORS] not all of the file could be read |
| 1801 | |
| 1802 | |
| 1803 | vim:tw=78:ts=8:ft=help:norl: |