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