*insert.txt* For Vim version 7.1. Last change: 2007 May 07 VIM REFERENCE MANUAL by Bram Moolenaar *Insert* *Insert-mode*Inserting and replacing text *mode-ins-repl* Most of this file is about Insert and Replace mode. At the end are a fewcommands for inserting text in other ways. An overview of the most often used commands can be found in chapter 24 of theuser manual |usr_24.txt|. 1. Special keys |ins-special-keys|2. Special special keys |ins-special-special|3. 'textwidth' and 'wrapmargin' options |ins-textwidth|4. 'expandtab', 'smarttab' and 'softtabstop' options |ins-expandtab|5. Replace mode |Replace-mode|6. Virtual Replace mode |Virtual-Replace-mode|7. Insert mode completion |ins-completion|8. Insert mode commands |inserting|9. Ex insert commands |inserting-ex|10. Inserting a file |inserting-file| Also see 'virtualedit', for moving the cursor to positions where there is nocharacter. Useful for editing a table. ==============================================================================1. Special keys *ins-special-keys* In Insert and Replace mode, the following characters have a special meaning;other characters are inserted directly. To insert one of these specialcharacters into the buffer, precede it with CTRL-V. To insert a <Nul>character use "CTRL-V CTRL-@" or "CTRL-V 000". On some systems, you have touse "CTRL-V 003" to insert a CTRL-C. Note: When CTRL-V is mapped you canoften use CTRL-Q instead |i_CTRL-Q|. If you are working in a special language mode when inserting text, see the'langmap' option, |'langmap'|, on how to avoid switching this mode on and offall the time. If you have 'insertmode' set, <Esc> and a few other keys get another meaning.See |'insertmode'|. char action ~----------------------------------------------------------------------- *i_CTRL-[* *i_<Esc>*<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish abbreviation. Note: If your <Esc> key is hard to hit on your keyboard, train yourself to use CTRL-[. *i_CTRL-C*CTRL-C Quit insert mode, go back to Normal mode. Do not check for abbreviations. Does not trigger the |InsertLeave| autocommand event. *i_CTRL-@*CTRL-@ Insert previously inserted text and stop insert. {Vi: only when typed as first char, only up to 128 chars} *i_CTRL-A*CTRL-A Insert previously inserted text. {not in Vi} *i_CTRL-H* *i_<BS>* *i_BS*<BS> or CTRL-H Delete the character before the cursor (see |i_backspacing| about joining lines). See |:fixdel| if your <BS> key does not do what you want. {Vi: does not delete autoindents} *i_<Del>* *i_DEL*<Del> Delete the character under the cursor. If the cursor is at the end of the line, and the 'backspace' option includes "eol", delete the <EOL>; the next line is appended after the current one. See |:fixdel| if your <Del> key does not do what you want. {not in Vi} *i_CTRL-W*CTRL-W Delete the word before the cursor (see |i_backspacing| about joining lines). See the section "word motions", |word-motions|, for the definition of a word. *i_CTRL-U*CTRL-U Delete all entered characters in the current line (see |i_backspacing| about joining lines). *i_CTRL-I* *i_<Tab>* *i_Tab*<Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the equivalent number of spaces is inserted (use CTRL-V <Tab> to avoid the expansion; use CTRL-Q <Tab> if CTRL-V is mapped |i_CTRL-Q|). See also the 'smarttab' option and |ins-expandtab|. *i_CTRL-J* *i_<NL>*<NL> or CTRL-J Begin new line. *i_CTRL-M* *i_<CR>*<CR> or CTRL-M Begin new line. *i_CTRL-K*CTRL-K {char1} [char2] Enter digraph (see |digraphs|). When {char1} is a special key, the code for that key is inserted in <> form. For example, the string "<S-Space>" can be entered by typing <C-K><S-Space> (two keys). Neither char is considered for mapping. {not in Vi} CTRL-N Find next keyword (see |i_CTRL-N|). {not in Vi}CTRL-P Find previous keyword (see |i_CTRL-P|). {not in Vi} CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R* Insert the contents of a register. Between typing CTRL-R and the second character, '"' will be displayed to indicate that you are expected to enter the name of a register. The text is inserted as if you typed it, but mappings and abbreviations are not used. If you have options like 'textwidth', 'formatoptions', or 'autoindent' set, this will influence what will be inserted. This is different from what happens with the "p" command and pasting with the mouse. Special registers: '"' the unnamed register, containing the text of the last delete or yank '%' the current file name '#' the alternate file name '*' the clipboard contents (X11: primary selection) '+' the clipboard contents '/' the last search pattern ':' the last command-line '.' the last inserted text '-' the last small (less than a line) delete '=' the expression register: you are prompted to enter an expression (see |expression|) Note that 0x80 (128 decimal) is used for special keys. E.g., you can use this to move the cursor up: CTRL-R ="\<Up>" Use CTRL-R CTRL-R to insert text literally. When the result is a |List| the items are used as lines. They can have line breaks inside too. See |registers| about registers. {not in Vi} CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R* Insert the contents of a register. Works like using a single CTRL-R, but the text is inserted literally, not as if typed. This differs when the register contains characters like <BS>. Example, where register a contains "ab^Hc": > CTRL-R a results in "ac". CTRL-R CTRL-R a results in "ab^Hc".< Options 'textwidth', 'formatoptions', etc. still apply. If you also want to avoid these, use "<C-R><C-O>r", see below. The '.' register (last inserted text) is still inserted as typed. {not in Vi} CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O* Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse |<MiddleMouse>|. Does not replace characters! The '.' register (last inserted text) is still inserted as typed. {not in Vi} CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P* Insert the contents of a register literally and fix the indent, like |[<MiddleMouse>|. Does not replace characters! The '.' register (last inserted text) is still inserted as typed. {not in Vi} *i_CTRL-T*CTRL-T Insert one shiftwidth of indent at the start of the current line. The indent is always rounded to a 'shiftwidth' (this is vi compatible). {Vi: only when in indent} *i_CTRL-D*CTRL-D Delete one shiftwidth of indent at the start of the current line. The indent is always rounded to a 'shiftwidth' (this is vi compatible). {Vi: CTRL-D works only when used after autoindent} *i_0_CTRL-D*0 CTRL-D Delete all indent in the current line. {Vi: CTRL-D works only when used after autoindent} *i_^_CTRL-D*^ CTRL-D Delete all indent in the current line. The indent is restored in the next line. This is useful when inserting a label. {Vi: CTRL-D works only when used after autoindent} *i_CTRL-V*CTRL-V Insert next non-digit literally. For special keys, the terminal code is inserted. It's also possible to enter the decimal, octal or hexadecimal value of a character |i_CTRL-V_digit|. The characters typed right after CTRL-V are not considered for mapping. {Vi: no decimal byte entry} Note: When CTRL-V is mapped (e.g., to paste text) you can often use CTRL-Q instead |i_CTRL-Q|. *i_CTRL-Q*CTRL-Q Same as CTRL-V. Note: Some terminal connections may eat CTRL-Q, it doesn't work then. It does work in the GUI. CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can be given to complete words or scroll the window. See |i_CTRL-X| and |ins-completion|. {not in Vi} *i_CTRL-E*CTRL-E Insert the character which is below the cursor. {not in Vi} *i_CTRL-Y*CTRL-Y Insert the character which is above the cursor. {not in Vi} Note that for CTRL-E and CTRL-Y 'textwidth' is not used, to be able to copy characters from a long line. *i_CTRL-_*CTRL-_ Switch between languages, as follows: - When in a rightleft window, revins and nohkmap are toggled, since English will likely be inserted in this case. - When in a norightleft window, revins and hkmap are toggled, since Hebrew will likely be inserted in this case. CTRL-_ moves the cursor to the end of the typed text. This command is only available when the 'allowrevins' option is set. Please refer to |rileft.txt| for more information about right-to-left mode. {not in Vi} Only if compiled with the |+rightleft| feature. *i_CTRL-^*CTRL-^ Toggle the use of typing language characters. When language |:lmap| mappings are defined: - If 'iminsert' is 1 (langmap mappings used) it becomes 0 (no langmap mappings used). - If 'iminsert' has another value it becomes 1, thus langmap mappings are enabled. When no language mappings are defined: - If 'iminsert' is 2 (Input Method used) it becomes 0 (no Input Method used). - If 'iminsert' has another value it becomes 2, thus the Input Method is enabled. When set to 1, the value of the "b:keymap_name" variable, the 'keymap' option or "<lang>" appears in the status line. The language mappings are normally used to type characters that are different from what the keyboard produces. The 'keymap' option can be used to install a whole number of them. {not in Vi} *i_CTRL-]*CTRL-] Trigger abbreviation, without inserting a character. {not in Vi} *i_<Insert>*<Insert> Toggle between Insert and Replace mode. {not in Vi}----------------------------------------------------------------------- *i_backspacing*The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option(unless 'revins' is set). This is a comma separated list of items: item action ~indent allow backspacing over autoindenteol allow backspacing over end-of-line (join lines)start allow backspacing over the start position of insert; CTRL-W and CTRL-U stop once at the start position When 'backspace' is empty, Vi compatible backspacing is used. You cannotbackspace over autoindent, before column 1 or before where insert started. For backwards compatibility the values "0", "1" and "2" are also allowed, see|'backspace'|. If the 'backspace' option does contain "eol" and the cursor is in column 1when one of the three keys is used, the current line is joined with theprevious line. This effectively deletes the <EOL> in front of the cursor.{Vi: does not cross lines, does not delete past start position of insert} *i_CTRL-V_digit*With CTRL-V the decimal, octal or hexadecimal value of a character can beentered directly. This way you can enter any character, except a line break(<NL>, value 10). There are five ways to enter the character value: first char mode max nr of chars max value ~(none) decimal 3 255o or O octal 3 377 (255)x or X hexadecimal 2 ff (255)u hexadecimal 4 ffff (65535)U hexadecimal 8 7fffffff (2147483647) Normally you would type the maximum number of characters. Thus to enter aspace (value 32) you would type <C-V>032. You can omit the leading zero, inwhich case the character typed after the number must be a non-digit. Thishappens for the other modes as well: As soon as you type a character that isinvalid for the mode, the value before it will be used and the "invalid"character is dealt with in the normal way. If you enter a value of 10, it will end up in the file as a 0. The 10 is a<NL>, which is used internally to represent the <Nul> character. When writingthe buffer to a file, the <NL> character is translated into <Nul>. The <NL>character is written at the end of each line. Thus if you want to insert a<NL> character in a file you will have to make a line break. *i_CTRL-X* *insert_expand*CTRL-X enters a sub-mode where several commands can be used. Most of thesecommands do keyword completion; see |ins-completion|. These are not availablewhen Vim was compiled without the |+insert_expand| feature. Two commands can be used to scroll the window up or down, without exitinginsert mode: *i_CTRL-X_CTRL-E*CTRL-X CTRL-E scroll window one line up. When doing completion look here: |complete_CTRL-E| *i_CTRL-X_CTRL-Y*CTRL-X CTRL-Y scroll window one line down. When doing completion look here: |complete_CTRL-Y| After CTRL-X is pressed, each CTRL-E (CTRL-Y) scrolls the window up (down) byone line unless that would cause the cursor to move from its current positionin the file. As soon as another key is pressed, CTRL-X mode is exited andthat key is interpreted as in Insert mode. ==============================================================================2. Special special keys *ins-special-special* The following keys are special. They stop the current insert, do something,and then restart insertion. This means you can do something without gettingout of Insert mode. This is very handy if you prefer to use the Insert modeall the time, just like editors that don't have a separate Normal mode. Youmay also want to set the 'backspace' option to "indent,eol,start" and set the'insertmode' option. You can use CTRL-O if you want to map a function key toa command. The changes (inserted or deleted characters) before and after these keys canbe undone separately. Only the last change can be redone and always behaveslike an "i" command. char action ~-----------------------------------------------------------------------<Up> cursor one line up *i_<Up>*<Down> cursor one line down *i_<Down>*CTRL-G <Up> cursor one line up, insert start column *i_CTRL-G_<Up>*CTRL-G k cursor one line up, insert start column *i_CTRL-G_k*CTRL-G CTRL-K cursor one line up, insert start column *i_CTRL-G_CTRL-K*CTRL-G <Down> cursor one line down, insert start column *i_CTRL-G_<Down>*CTRL-G j cursor one line down, insert start column *i_CTRL-G_j*CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J*<Left> cursor one character left *i_<Left>*<Right> cursor one character right *i_<Right>*<S-Left> cursor one word back (like "b" command) *i_<S-Left>*<C-Left> cursor one word back (like "b" command) *i_<C-Left>*<S-Right> cursor one word forward (like "w" command) *i_<S-Right>*<C-Right> cursor one word forward (like "w" command) *i_<C-Right>*<Home> cursor to first char in the line *i_<Home>*<End> cursor to after last char in the line *i_<End>*<C-Home> cursor to first char in the file *i_<C-Home>*<C-End> cursor to after last char in the file *i_<C-End>*<LeftMouse> cursor to position of mouse click *i_<LeftMouse>*<S-Up> move window one page up *i_<S-Up>*<PageUp> move window one page up *i_<PageUp>*<S-Down> move window one page down *i_<S-Down>*<PageDown> move window one page down *i_<PageDown>*<MouseDown> scroll three lines down *i_<MouseDown>*<S-MouseDown> scroll a full page down *i_<S-MouseDown>*<MouseUp> scroll three lines up *i_<MouseUp>*<S-MouseUp> scroll a full page up *i_<S-MouseUp>*CTRL-O execute one command, return to Insert mode *i_CTRL-O*CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O*CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L*CTRL-G u break undo sequence, start new change *i_CTRL-G_u*----------------------------------------------------------------------- Note: If the cursor keys take you out of Insert mode, check the 'noesckeys'option. The CTRL-O command sometimes has a side effect: If the cursor was beyond theend of the line, it will be put on the last character in the line. Inmappings it's often better to use <Esc> (first put an "x" in the text, <Esc>will then always put the cursor on it). Or use CTRL-\ CTRL-O, but thenbeware of the cursor possibly being beyond the end of the line. The shifted cursor keys are not available on all terminals. Another side effect is that a count specified before the "i" or "a" command isignored. That is because repeating the effect of the command after CTRL-O istoo complicated. An example for using CTRL-G u: > :inoremap <C-H> <C-G>u<C-H> This redefines the backspace key to start a new undo sequence. You can nowundo the effect of the backspace key, without changing what you typed beforethat, with CTRL-O u. Using CTRL-O splits undo: the text typed before and after it is undoneseparately. If you want to avoid this (e.g., in a mapping) you might be ableto use CTRL-R = |i_CTRL-R|. E.g., to call a function: > :imap <F2> <C-R>=MyFunc()<CR> When the 'whichwrap' option is set appropriately, the <Left> and <Right>keys on the first/last character in the line make the cursor wrap to theprevious/next line. The CTRL-G j and CTRL-G k commands can be used to insert text in front of acolumn. Example: > int i; int j;Position the cursor on the first "int", type "istatic <C-G>j ". Theresult is: > static int i; int j;When inserting the same text in front of the column in every line, use theVisual blockwise command "I" |v_b_I|. ==============================================================================3. 'textwidth' and 'wrapmargin' options *ins-textwidth* The 'textwidth' option can be used to automatically break a line before itgets too long. Set the 'textwidth' option to the desired maximum linelength. If you then type more characters (not spaces or tabs), thelast word will be put on a new line (unless it is the only word on theline). If you set 'textwidth' to 0, this feature is disabled. The 'wrapmargin' option does almost the same. The difference is that'textwidth' has a fixed width while 'wrapmargin' depends on the width of thescreen. When using 'wrapmargin' this is equal to using 'textwidth' with avalue equal to (columns - 'wrapmargin'), where columns is the width of thescreen. When 'textwidth' and 'wrapmargin' are both set, 'textwidth' is used. If you don't really want to break the line, but view the line wrapped at aconvenient place, see the 'linebreak' option. The line is only broken automatically when using Insert mode, or whenappending to a line. When in replace mode and the line length is notchanged, the line will not be broken. Long lines are broken if you enter a non-white character after the margin.The situations where a line will be broken can be restricted by addingcharacters to the 'formatoptions' option:"l" Only break a line if it was not longer than 'textwidth' when the insert started."v" Only break at a white character that has been entered during the current insert command. This is mostly Vi-compatible."lv" Only break if the line was not longer than 'textwidth' when the insert started and only at a white character that has been entered during the current insert command. Only differs from "l" when entering non-white characters while crossing the 'textwidth' boundary. Normally an internal function will be used to decide where to break the line.If you want to do it in a different way set the 'formatexpr' option to anexpression that will take care of the line break. If you want to format a block of text, you can use the "gq" operator. Type"gq" and a movement command to move the cursor to the end of the block. Inmany cases, the command "gq}" will do what you want (format until the end ofparagraph). Alternatively, you can use "gqap", which will format the wholeparagraph, no matter where the cursor currently is. Or you can use Visualmode: hit "v", move to the end of the block, and type "gq". See also |gq|. ==============================================================================4. 'expandtab', 'smarttab' and 'softtabstop' options *ins-expandtab* If the 'expandtab' option is on, spaces will be used to fill the amount ofwhitespace of the tab. If you want to enter a real <Tab>, type CTRL-V first(use CTRL-Q when CTRL-V is mapped |i_CTRL-Q|).The 'expandtab' option is off by default. Note that in Replace mode, a singlecharacter is replaced with several spaces. The result of this is that thenumber of characters in the line increases. Backspacing will delete onespace at a time. The original character will be put back for only one spacethat you backspace over (the last one). {Vi does not have the 'expandtab'option} *ins-smarttab*When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions atthe beginning of a line and 'tabstop' positions in other places. This meansthat often spaces instead of a <Tab> character are inserted. When 'smarttabis off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is onlyused for ">>" and the like. {not in Vi} *ins-softtabstop*When the 'softtabstop' option is non-zero, a <Tab> inserts 'softtabstop'positions, and a <BS> used to delete white space, will delete 'softtabstop'positions. This feels like 'tabstop' was set to 'softtabstop', but a real<Tab> character still takes 'tabstop' positions, so your file will still lookcorrect when used by other applications. If 'softtabstop' is non-zero, a <BS> will try to delete as much white space tomove to the previous 'softtabstop' position, except when the previouslyinserted character is a space, then it will only delete the character beforethe cursor. Otherwise you cannot always delete a single character before thecursor. You will have to delete 'softtabstop' characters first, and then typeextra spaces to get where you want to be. ==============================================================================5. Replace mode *Replace* *Replace-mode* *mode-replace* Enter Replace mode with the "R" command in normal mode. In Replace mode, one character in the line is deleted for every character youtype. If there is no character to delete (at the end of the line), thetyped character is appended (as in Insert mode). Thus the number ofLines 1–500 of 1880. Load more
*insert.txt* For Vim version 7.1. Last change: 2007 May 07 VIM REFERENCE MANUAL by Bram Moolenaar *Insert* *Insert-mode* Inserting and replacing text *mode-ins-repl* Most of this file is about Insert and Replace mode. At the end are a few commands for inserting text in other ways. An overview of the most often used commands can be found in chapter 24 of the user manual |usr_24.txt|. 1. Special keys |ins-special-keys| 2. Special special keys |ins-special-special| 3. 'textwidth' and 'wrapmargin' options |ins-textwidth| 4. 'expandtab', 'smarttab' and 'softtabstop' options |ins-expandtab| 5. Replace mode |Replace-mode| 6. Virtual Replace mode |Virtual-Replace-mode| 7. Insert mode completion |ins-completion| 8. Insert mode commands |inserting| 9. Ex insert commands |inserting-ex| 10. Inserting a file |inserting-file| Also see 'virtualedit', for moving the cursor to positions where there is no character. Useful for editing a table. ============================================================================== 1. Special keys *ins-special-keys* In Insert and Replace mode, the following characters have a special meaning; other characters are inserted directly. To insert one of these special characters into the buffer, precede it with CTRL-V. To insert a <Nul> character use "CTRL-V CTRL-@" or "CTRL-V 000". On some systems, you have to use "CTRL-V 003" to insert a CTRL-C. Note: When CTRL-V is mapped you can often use CTRL-Q instead |i_CTRL-Q|. If you are working in a special language mode when inserting text, see the 'langmap' option, |'langmap'|, on how to avoid switching this mode on and off all the time. If you have 'insertmode' set, <Esc> and a few other keys get another meaning. See |'insertmode'|. char action ~ ----------------------------------------------------------------------- *i_CTRL-[* *i_<Esc>* <Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish abbreviation. Note: If your <Esc> key is hard to hit on your keyboard, train yourself to use CTRL-[. *i_CTRL-C* CTRL-C Quit insert mode, go back to Normal mode. Do not check for abbreviations. Does not trigger the |InsertLeave| autocommand event. *i_CTRL-@* CTRL-@ Insert previously inserted text and stop insert. {Vi: only when typed as first char, only up to 128 chars} *i_CTRL-A* CTRL-A Insert previously inserted text. {not in Vi} *i_CTRL-H* *i_<BS>* *i_BS* <BS> or CTRL-H Delete the character before the cursor (see |i_backspacing| about joining lines). See |:fixdel| if your <BS> key does not do what you want. {Vi: does not delete autoindents} *i_<Del>* *i_DEL* <Del> Delete the character under the cursor. If the cursor is at the end of the line, and the 'backspace' option includes "eol", delete the <EOL>; the next line is appended after the current one. See |:fixdel| if your <Del> key does not do what you want. {not in Vi} *i_CTRL-W* CTRL-W Delete the word before the cursor (see |i_backspacing| about joining lines). See the section "word motions", |word-motions|, for the definition of a word. *i_CTRL-U* CTRL-U Delete all entered characters in the current line (see |i_backspacing| about joining lines). *i_CTRL-I* *i_<Tab>* *i_Tab* <Tab> or CTRL-I Insert a tab. If the 'expandtab' option is on, the equivalent number of spaces is inserted (use CTRL-V <Tab> to avoid the expansion; use CTRL-Q <Tab> if CTRL-V is mapped |i_CTRL-Q|). See also the 'smarttab' option and |ins-expandtab|. *i_CTRL-J* *i_<NL>* <NL> or CTRL-J Begin new line. *i_CTRL-M* *i_<CR>* <CR> or CTRL-M Begin new line. *i_CTRL-K* CTRL-K {char1} [char2] Enter digraph (see |digraphs|). When {char1} is a special key, the code for that key is inserted in <> form. For example, the string "<S-Space>" can be entered by typing <C-K><S-Space> (two keys). Neither char is considered for mapping. {not in Vi} CTRL-N Find next keyword (see |i_CTRL-N|). {not in Vi} CTRL-P Find previous keyword (see |i_CTRL-P|). {not in Vi} CTRL-R {0-9a-z"%#*+:.-=} *i_CTRL-R* Insert the contents of a register. Between typing CTRL-R and the second character, '"' will be displayed to indicate that you are expected to enter the name of a register. The text is inserted as if you typed it, but mappings and abbreviations are not used. If you have options like 'textwidth', 'formatoptions', or 'autoindent' set, this will influence what will be inserted. This is different from what happens with the "p" command and pasting with the mouse. Special registers: '"' the unnamed register, containing the text of the last delete or yank '%' the current file name '#' the alternate file name '*' the clipboard contents (X11: primary selection) '+' the clipboard contents '/' the last search pattern ':' the last command-line '.' the last inserted text '-' the last small (less than a line) delete '=' the expression register: you are prompted to enter an expression (see |expression|) Note that 0x80 (128 decimal) is used for special keys. E.g., you can use this to move the cursor up: CTRL-R ="\<Up>" Use CTRL-R CTRL-R to insert text literally. When the result is a |List| the items are used as lines. They can have line breaks inside too. See |registers| about registers. {not in Vi} CTRL-R CTRL-R {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-R* Insert the contents of a register. Works like using a single CTRL-R, but the text is inserted literally, not as if typed. This differs when the register contains characters like <BS>. Example, where register a contains "ab^Hc": > CTRL-R a results in "ac". CTRL-R CTRL-R a results in "ab^Hc". < Options 'textwidth', 'formatoptions', etc. still apply. If you also want to avoid these, use "<C-R><C-O>r", see below. The '.' register (last inserted text) is still inserted as typed. {not in Vi} CTRL-R CTRL-O {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-O* Insert the contents of a register literally and don't auto-indent. Does the same as pasting with the mouse |<MiddleMouse>|. Does not replace characters! The '.' register (last inserted text) is still inserted as typed. {not in Vi} CTRL-R CTRL-P {0-9a-z"%#*+/:.-=} *i_CTRL-R_CTRL-P* Insert the contents of a register literally and fix the indent, like |[<MiddleMouse>|. Does not replace characters! The '.' register (last inserted text) is still inserted as typed. {not in Vi} *i_CTRL-T* CTRL-T Insert one shiftwidth of indent at the start of the current line. The indent is always rounded to a 'shiftwidth' (this is vi compatible). {Vi: only when in indent} *i_CTRL-D* CTRL-D Delete one shiftwidth of indent at the start of the current line. The indent is always rounded to a 'shiftwidth' (this is vi compatible). {Vi: CTRL-D works only when used after autoindent} *i_0_CTRL-D* 0 CTRL-D Delete all indent in the current line. {Vi: CTRL-D works only when used after autoindent} *i_^_CTRL-D* ^ CTRL-D Delete all indent in the current line. The indent is restored in the next line. This is useful when inserting a label. {Vi: CTRL-D works only when used after autoindent} *i_CTRL-V* CTRL-V Insert next non-digit literally. For special keys, the terminal code is inserted. It's also possible to enter the decimal, octal or hexadecimal value of a character |i_CTRL-V_digit|. The characters typed right after CTRL-V are not considered for mapping. {Vi: no decimal byte entry} Note: When CTRL-V is mapped (e.g., to paste text) you can often use CTRL-Q instead |i_CTRL-Q|. *i_CTRL-Q* CTRL-Q Same as CTRL-V. Note: Some terminal connections may eat CTRL-Q, it doesn't work then. It does work in the GUI. CTRL-X Enter CTRL-X mode. This is a sub-mode where commands can be given to complete words or scroll the window. See |i_CTRL-X| and |ins-completion|. {not in Vi} *i_CTRL-E* CTRL-E Insert the character which is below the cursor. {not in Vi} *i_CTRL-Y* CTRL-Y Insert the character which is above the cursor. {not in Vi} Note that for CTRL-E and CTRL-Y 'textwidth' is not used, to be able to copy characters from a long line. *i_CTRL-_* CTRL-_ Switch between languages, as follows: - When in a rightleft window, revins and nohkmap are toggled, since English will likely be inserted in this case. - When in a norightleft window, revins and hkmap are toggled, since Hebrew will likely be inserted in this case. CTRL-_ moves the cursor to the end of the typed text. This command is only available when the 'allowrevins' option is set. Please refer to |rileft.txt| for more information about right-to-left mode. {not in Vi} Only if compiled with the |+rightleft| feature. *i_CTRL-^* CTRL-^ Toggle the use of typing language characters. When language |:lmap| mappings are defined: - If 'iminsert' is 1 (langmap mappings used) it becomes 0 (no langmap mappings used). - If 'iminsert' has another value it becomes 1, thus langmap mappings are enabled. When no language mappings are defined: - If 'iminsert' is 2 (Input Method used) it becomes 0 (no Input Method used). - If 'iminsert' has another value it becomes 2, thus the Input Method is enabled. When set to 1, the value of the "b:keymap_name" variable, the 'keymap' option or "<lang>" appears in the status line. The language mappings are normally used to type characters that are different from what the keyboard produces. The 'keymap' option can be used to install a whole number of them. {not in Vi} *i_CTRL-]* CTRL-] Trigger abbreviation, without inserting a character. {not in Vi} *i_<Insert>* <Insert> Toggle between Insert and Replace mode. {not in Vi} ----------------------------------------------------------------------- *i_backspacing* The effect of the <BS>, CTRL-W, and CTRL-U depend on the 'backspace' option (unless 'revins' is set). This is a comma separated list of items: item action ~ indent allow backspacing over autoindent eol allow backspacing over end-of-line (join lines) start allow backspacing over the start position of insert; CTRL-W and CTRL-U stop once at the start position When 'backspace' is empty, Vi compatible backspacing is used. You cannot backspace over autoindent, before column 1 or before where insert started. For backwards compatibility the values "0", "1" and "2" are also allowed, see |'backspace'|. If the 'backspace' option does contain "eol" and the cursor is in column 1 when one of the three keys is used, the current line is joined with the previous line. This effectively deletes the <EOL> in front of the cursor. {Vi: does not cross lines, does not delete past start position of insert} *i_CTRL-V_digit* With CTRL-V the decimal, octal or hexadecimal value of a character can be entered directly. This way you can enter any character, except a line break (<NL>, value 10). There are five ways to enter the character value: first char mode max nr of chars max value ~ (none) decimal 3 255 o or O octal 3 377 (255) x or X hexadecimal 2 ff (255) u hexadecimal 4 ffff (65535) U hexadecimal 8 7fffffff (2147483647) Normally you would type the maximum number of characters. Thus to enter a space (value 32) you would type <C-V>032. You can omit the leading zero, in which case the character typed after the number must be a non-digit. This happens for the other modes as well: As soon as you type a character that is invalid for the mode, the value before it will be used and the "invalid" character is dealt with in the normal way. If you enter a value of 10, it will end up in the file as a 0. The 10 is a <NL>, which is used internally to represent the <Nul> character. When writing the buffer to a file, the <NL> character is translated into <Nul>. The <NL> character is written at the end of each line. Thus if you want to insert a <NL> character in a file you will have to make a line break. *i_CTRL-X* *insert_expand* CTRL-X enters a sub-mode where several commands can be used. Most of these commands do keyword completion; see |ins-completion|. These are not available when Vim was compiled without the |+insert_expand| feature. Two commands can be used to scroll the window up or down, without exiting insert mode: *i_CTRL-X_CTRL-E* CTRL-X CTRL-E scroll window one line up. When doing completion look here: |complete_CTRL-E| *i_CTRL-X_CTRL-Y* CTRL-X CTRL-Y scroll window one line down. When doing completion look here: |complete_CTRL-Y| After CTRL-X is pressed, each CTRL-E (CTRL-Y) scrolls the window up (down) by one line unless that would cause the cursor to move from its current position in the file. As soon as another key is pressed, CTRL-X mode is exited and that key is interpreted as in Insert mode. ============================================================================== 2. Special special keys *ins-special-special* The following keys are special. They stop the current insert, do something, and then restart insertion. This means you can do something without getting out of Insert mode. This is very handy if you prefer to use the Insert mode all the time, just like editors that don't have a separate Normal mode. You may also want to set the 'backspace' option to "indent,eol,start" and set the 'insertmode' option. You can use CTRL-O if you want to map a function key to a command. The changes (inserted or deleted characters) before and after these keys can be undone separately. Only the last change can be redone and always behaves like an "i" command. char action ~ ----------------------------------------------------------------------- <Up> cursor one line up *i_<Up>* <Down> cursor one line down *i_<Down>* CTRL-G <Up> cursor one line up, insert start column *i_CTRL-G_<Up>* CTRL-G k cursor one line up, insert start column *i_CTRL-G_k* CTRL-G CTRL-K cursor one line up, insert start column *i_CTRL-G_CTRL-K* CTRL-G <Down> cursor one line down, insert start column *i_CTRL-G_<Down>* CTRL-G j cursor one line down, insert start column *i_CTRL-G_j* CTRL-G CTRL-J cursor one line down, insert start column *i_CTRL-G_CTRL-J* <Left> cursor one character left *i_<Left>* <Right> cursor one character right *i_<Right>* <S-Left> cursor one word back (like "b" command) *i_<S-Left>* <C-Left> cursor one word back (like "b" command) *i_<C-Left>* <S-Right> cursor one word forward (like "w" command) *i_<S-Right>* <C-Right> cursor one word forward (like "w" command) *i_<C-Right>* <Home> cursor to first char in the line *i_<Home>* <End> cursor to after last char in the line *i_<End>* <C-Home> cursor to first char in the file *i_<C-Home>* <C-End> cursor to after last char in the file *i_<C-End>* <LeftMouse> cursor to position of mouse click *i_<LeftMouse>* <S-Up> move window one page up *i_<S-Up>* <PageUp> move window one page up *i_<PageUp>* <S-Down> move window one page down *i_<S-Down>* <PageDown> move window one page down *i_<PageDown>* <MouseDown> scroll three lines down *i_<MouseDown>* <S-MouseDown> scroll a full page down *i_<S-MouseDown>* <MouseUp> scroll three lines up *i_<MouseUp>* <S-MouseUp> scroll a full page up *i_<S-MouseUp>* CTRL-O execute one command, return to Insert mode *i_CTRL-O* CTRL-\ CTRL-O like CTRL-O but don't move the cursor *i_CTRL-\_CTRL-O* CTRL-L when 'insertmode' is set: go to Normal mode *i_CTRL-L* CTRL-G u break undo sequence, start new change *i_CTRL-G_u* ----------------------------------------------------------------------- Note: If the cursor keys take you out of Insert mode, check the 'noesckeys' option. The CTRL-O command sometimes has a side effect: If the cursor was beyond the end of the line, it will be put on the last character in the line. In mappings it's often better to use <Esc> (first put an "x" in the text, <Esc> will then always put the cursor on it). Or use CTRL-\ CTRL-O, but then beware of the cursor possibly being beyond the end of the line. The shifted cursor keys are not available on all terminals. Another side effect is that a count specified before the "i" or "a" command is ignored. That is because repeating the effect of the command after CTRL-O is too complicated. An example for using CTRL-G u: > :inoremap <C-H> <C-G>u<C-H> This redefines the backspace key to start a new undo sequence. You can now undo the effect of the backspace key, without changing what you typed before that, with CTRL-O u. Using CTRL-O splits undo: the text typed before and after it is undone separately. If you want to avoid this (e.g., in a mapping) you might be able to use CTRL-R = |i_CTRL-R|. E.g., to call a function: > :imap <F2> <C-R>=MyFunc()<CR> When the 'whichwrap' option is set appropriately, the <Left> and <Right> keys on the first/last character in the line make the cursor wrap to the previous/next line. The CTRL-G j and CTRL-G k commands can be used to insert text in front of a column. Example: > int i; int j; Position the cursor on the first "int", type "istatic <C-G>j ". The result is: > static int i; int j; When inserting the same text in front of the column in every line, use the Visual blockwise command "I" |v_b_I|. ============================================================================== 3. 'textwidth' and 'wrapmargin' options *ins-textwidth* The 'textwidth' option can be used to automatically break a line before it gets too long. Set the 'textwidth' option to the desired maximum line length. If you then type more characters (not spaces or tabs), the last word will be put on a new line (unless it is the only word on the line). If you set 'textwidth' to 0, this feature is disabled. The 'wrapmargin' option does almost the same. The difference is that 'textwidth' has a fixed width while 'wrapmargin' depends on the width of the screen. When using 'wrapmargin' this is equal to using 'textwidth' with a value equal to (columns - 'wrapmargin'), where columns is the width of the screen. When 'textwidth' and 'wrapmargin' are both set, 'textwidth' is used. If you don't really want to break the line, but view the line wrapped at a convenient place, see the 'linebreak' option. The line is only broken automatically when using Insert mode, or when appending to a line. When in replace mode and the line length is not changed, the line will not be broken. Long lines are broken if you enter a non-white character after the margin. The situations where a line will be broken can be restricted by adding characters to the 'formatoptions' option: "l" Only break a line if it was not longer than 'textwidth' when the insert started. "v" Only break at a white character that has been entered during the current insert command. This is mostly Vi-compatible. "lv" Only break if the line was not longer than 'textwidth' when the insert started and only at a white character that has been entered during the current insert command. Only differs from "l" when entering non-white characters while crossing the 'textwidth' boundary. Normally an internal function will be used to decide where to break the line. If you want to do it in a different way set the 'formatexpr' option to an expression that will take care of the line break. If you want to format a block of text, you can use the "gq" operator. Type "gq" and a movement command to move the cursor to the end of the block. In many cases, the command "gq}" will do what you want (format until the end of paragraph). Alternatively, you can use "gqap", which will format the whole paragraph, no matter where the cursor currently is. Or you can use Visual mode: hit "v", move to the end of the block, and type "gq". See also |gq|. ============================================================================== 4. 'expandtab', 'smarttab' and 'softtabstop' options *ins-expandtab* If the 'expandtab' option is on, spaces will be used to fill the amount of whitespace of the tab. If you want to enter a real <Tab>, type CTRL-V first (use CTRL-Q when CTRL-V is mapped |i_CTRL-Q|). The 'expandtab' option is off by default. Note that in Replace mode, a single character is replaced with several spaces. The result of this is that the number of characters in the line increases. Backspacing will delete one space at a time. The original character will be put back for only one space that you backspace over (the last one). {Vi does not have the 'expandtab' option} *ins-smarttab* When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at the beginning of a line and 'tabstop' positions in other places. This means that often spaces instead of a <Tab> character are inserted. When 'smarttab is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only used for ">>" and the like. {not in Vi} *ins-softtabstop* When the 'softtabstop' option is non-zero, a <Tab> inserts 'softtabstop' positions, and a <BS> used to delete white space, will delete 'softtabstop' positions. This feels like 'tabstop' was set to 'softtabstop', but a real <Tab> character still takes 'tabstop' positions, so your file will still look correct when used by other applications. If 'softtabstop' is non-zero, a <BS> will try to delete as much white space to move to the previous 'softtabstop' position, except when the previously inserted character is a space, then it will only delete the character before the cursor. Otherwise you cannot always delete a single character before the cursor. You will have to delete 'softtabstop' characters first, and then type extra spaces to get where you want to be. ============================================================================== 5. Replace mode *Replace* *Replace-mode* *mode-replace* Enter Replace mode with the "R" command in normal mode. In Replace mode, one character in the line is deleted for every character you type. If there is no character to delete (at the end of the line), the typed character is appended (as in Insert mode). Thus the number of