Nvim:help pages,generated fromsource using thetree-sitter-vimdoc parser.
CTRL-V. To insert a<Nul>character use "CTRL-VCTRL-@" or "CTRL-V 000". On some systems, you have touse "CTRL-V 003" to insert aCTRL-C. Note: WhenCTRL-V is mapped you canoften useCTRL-Q insteadi_CTRL-Q.<Esc> orCTRL-[End insert or Replace mode, go back to Normal mode. Finishabbreviation.Note: If your<Esc> key is hard to hit, tryCTRL-[ instead.i_METAi_ALTALT (META) may act like<Esc> if the chord is not mapped.For example<A-x> acts like<Esc>x if<A-x> does not have aninsert-mode mapping.i_CTRL-C<BS> orCTRL-HDelete the character before the cursor (seei_backspacingabout joining lines).i_<Del>i_DEL<Del>Delete the character under the cursor. If the cursor is atthe end of the line, and the'backspace' option includes"eol" (the default), delete the<EOL>; the next line isappended after the current one.i_CTRL-W<Tab> orCTRL-I Insert a tab. If the'expandtab' option is on, theequivalent number of spaces is inserted (useCTRL-V<Tab> toavoid the expansion; useCTRL-Q<Tab> ifCTRL-V is mappedi_CTRL-Q). See also the'smarttab' option andins-expandtab.i_CTRL-Ji_<NL><NL> orCTRL-JBegin new line.i_CTRL-Mi_<CR><CR> orCTRL-MBegin new line.i_CTRL-K{char1} [char2]Enter digraph (seedigraphs). When{char1} is a specialkey, the code for that key is inserted in <> form. Forexample, the string "<S-Space>" can be entered by typing<C-K><S-Space> (two keys). Neither char is considered formapping.{register}i_CTRL-RCTRL-R andthe second character, '"' will be displayed to indicate thatyou are expected to enter the name of a register. When usedwith named or clipboard registers (A-Z,a-z,0-9,+) text isinserted literally like pasting with "p". For other registers,the text is inserted as if you typed it, but mappings andabbreviations are not used. If you have options like'textwidth','formatoptions', or'autoindent' set, this willinfluence what will be inserted. This is different from whathappens with the "p" command and pasting with the mouse.Special registers:'"'the unnamed register, containing the text ofthe 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 texti_CTRL-R_-CTRL-R ="\<Up>"you can use this to insert a register astyped withCTRL-R =@reg.UseCTRL-RCTRL-R to insert text literally.When the result is aList the items are usedas lines. They can have line breaks insidetoo.When the result is a Float it's automaticallyconverted to a String.When append() or setline() is invoked the undosequence will be broken.Seeregisters about registers.CTRL-R{register}i_CTRL-R_CTRL-RCTRL-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 aresults in "ac".CTRL-R CTRL-R aresults in "ab^Hc".
CTRL-RCTRL-O, see below.The '.' register (last inserted text) is still inserted astyped.After this command, the '.' register contains the text fromthe register as if it was inserted by typing it.CTRL-O{register}i_CTRL-R_CTRL-OP.The '.' register (last inserted text) is still inserted astyped.After this command, the '.' register contains the commandtyped and not the text. I.e., the literals "^R^O" and not thetext from the register.Does not replace characters inReplace-mode!CTRL-P{register}i_CTRL-R_CTRL-PCTRL-DDelete all indent in the current line. The indent isrestored in the next line. This is useful when inserting alabel.CTRL-V are not considered formapping.For special keys, the CTRL modifier may be included into thekey to produce a control character. If there is no controlcharacter for the key then itskey-notation is inserted.Note: WhenCTRL-V is mapped (e.g., to paste text) you canoften useCTRL-Q insteadi_CTRL-Q.CTRL-V.Note: Some terminal connections may eatCTRL-Q, it doesn'twork then. It does work in the GUI.CTRL-V, but do not try to include the CTRLmodifier into the key.Note: WhenCTRL-SHIFT-V is intercepted by your system (e.g.,to paste text) you can often useCTRL-SHIFT-Q instead.However, in some terminals (e.g. GNOME Terminal),CTRL-SHIFT-Qquits the terminal without confirmation.CTRL-X mode. This is a sub-mode where commands canbe given to complete words or scroll the window. Seei_CTRL-X andins-completion.CTRL-E andCTRL-Y'textwidth' is not used, to beable to copy characters from a long line.CTRL-_ moves the cursor to the end of the typed text.CTRL-^Toggle the use of typing language characters.When language:lmap mappings are defined:<BS>,CTRL-W, andCTRL-U depend on the'backspace' option(unless'revins' is set). This is a comma-separated list of items:CTRL-W andCTRL-U stop once at the start of insert.nostop like start, exceptCTRL-W andCTRL-U do not stop at the start of insert.<EOL> in front of the cursor.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:<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.<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.Also see'fileformat'.CTRL-Escroll window one line up.When doing completion look here:complete_CTRL-ECTRL-Yscroll window one line down.When doing completion look here:complete_CTRL-YCTRL-X is pressed, eachCTRL-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.CTRL-O if you want to map a function key to a command.<Up>cursor one line upi_<Up><Down>cursor one line downi_<Down><Up>cursor one line up, insert start columni_CTRL-G_<Up>CTRL-Kcursor one line up, insert start columni_CTRL-G_CTRL-K<Down>cursor one line down, insert start columni_CTRL-G_<Down>CTRL-G jcursor one line down, insert start columni_CTRL-G_jCTRL-GCTRL-Jcursor one line down, insert start columni_CTRL-G_CTRL-J<Left>cursor one character lefti_<Left><Right>cursor one character righti_<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 linei_<Home><End>cursor to after last char in the linei_<End><C-Home>cursor to first char in the filei_<C-Home><C-End>cursor to after last char in the filei_<C-End><LeftMouse>cursor to position of mouse clicki_<LeftMouse><S-Up>move window one page upi_<S-Up><PageUp>move window one page upi_<PageUp><S-Down>move window one page downi_<S-Down><PageDown>move window one page downi_<PageDown><ScrollWheelDown> move window three lines downi_<ScrollWheelDown><S-ScrollWheelDown> move window one page downi_<S-ScrollWheelDown><ScrollWheelUp> move window three lines upi_<ScrollWheelUp><S-ScrollWheelUp> move window one page upi_<S-ScrollWheelUp><ScrollWheelLeft> move window six columns lefti_<ScrollWheelLeft><S-ScrollWheelLeft> move window one page lefti_<S-ScrollWheelLeft><ScrollWheelRight> move window six columns righti_<ScrollWheelRight><S-ScrollWheelRight> move window one page righti_<S-ScrollWheelRight>CTRL-\CTRL-OlikeCTRL-O but don't move the cursori_CTRL-\_CTRL-OCTRL-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 useCTRL-\CTRL-O, but thenbeware of the cursor possibly being beyond the end of the line. Note that thecommand followingCTRL-\CTRL-O can still move the cursor, it is not restoredto its original position.CTRL-O command takes you to Normal mode. If you then use a command enterInsert mode again it normally doesn't nest. Thus when typing "a<C-O>a" andthen<Esc> takes you back to Normal mode, you do not need to type<Esc> twice.An exception is when not typing the command, e.g. when executing a mapping orsourcing a script. This makes mappings work that briefly switch to Insertmode.CTRL-O istoo complicated.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. Another example::inoremap <CR> <C-]><C-G>u<CR>This starts a new undo block at each line break. It also expandsabbreviations before this.
CTRL-G U:inoremap <Left> <C-G>U<Left>inoremap <Right> <C-G>U<Right>inoremap <expr> <Home> col('.') == match(getline('.'), '\S') + 1 ? \ repeat('<C-G>U<Left>', col('.') - 1) : \ (col('.') < match(getline('.'), '\S') ? \ repeat('<C-G>U<Right>', match(getline('.'), '\S') + 0) : \ repeat('<C-G>U<Left>', col('.') - 1 - match(getline('.'), '\S')))inoremap <expr> <End> repeat('<C-G>U<Right>', col('$') - col('.'))inoremap ( ()<C-G>U<Left>This makes it possible to use the cursor keys in Insert mode, without startinga new undo block and therefore using. (redo) will work as expected. Alsoentering a text like (with the "(" mapping from above):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 useCTRL-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.CTRL-G j andCTRL-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.
<Tab>, typeCTRL-V first(useCTRL-Q whenCTRL-V is mappedi_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).<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.<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.<Tab> key indents by'shiftwidth' if thecursor is in leading whitespace. The<BS> key has the opposite effect. Thisbehaves as if'softtabstop' were set to the value of'shiftwidth'. Thisoption allows the user to set'softtabstop' to a value other than'shiftwidth'and still use the<Tab> key for indentation.<NL> is typed, a line break is inserted and no character is deleted.<Tab> characters. If you type a normal printing character inits place, the number of characters is still the same, but the number ofcolumns will become smaller.<BS>,CTRL-W, orCTRL-U), whathappens is that you delete the changes. The characters that were replacedare restored. If you had typed past the existing text, the characters youadded are deleted. This is effectively a character-at-a-time undo.<Tab> will replace one character withseveral spaces. The result of this is that the number of characters in theline increases. Backspacing will delete one space at a time. The originalcharacter will be put back for only one space that you backspace over (thelast one).<Tab> it may replace several normal characters, and if youtype a letter on top of a<Tab> it may not replace anything at all, since the<Tab> will still line up to the same place as before.<NL> still doesn't cause characters later in the file to appear tomove. The rest of the current line will be replaced by the<NL> (that is,they are deleted), and replacing continues on the next line. A new line isNOT inserted unless you go past the end of the file.CTRL-T andCTRL-D. The charactersbefore the cursor are shifted sideways as normal, but characters later in theline still remain still.CTRL-T will hide some of the old line under theshifted characters, butCTRL-D will reveal them again.<BS> etc will bring back the characters that werereplaced. This still works in conjunction with'smartindent',CTRL-T andCTRL-D,'expandtab','smarttab','softtabstop', etc.<Tab> separated columns in tables, forentering new data while keeping all the columns aligned.CTRL-N andCTRL-P, are done inCTRL-X mode. This is asub-mode of Insert and Replace modes. You enterCTRL-X mode by typingCTRL-Xand one of theCTRL-X commands. You exitCTRL-X mode by typing a key that isnot a validCTRL-X mode command. Valid keys are theCTRL-X command itself,CTRL-N (next), andCTRL-P (previous).CTRL-E to stop it and go back to theoriginally typed text. TheCTRL-E will not be inserted.CTRL-Y stops completion and accepts thecurrently selected entry. Typing a space, Enter, or some other unprintablecharacter will leave completion mode and insert that typed character. If youwant to use<Enter> to accept a completion item, use this mapping:inoremap <expr> <cr> pumvisible() ? '<c-y>' : '<cr>'When the popup menu is displayed there are a few more special keys, seepopupmenu-keys.CTRL-X mode are not mapped. This allows for:map <C-F> <C-X><C-F> to work. The key that endsCTRL-X mode (any key thatis not a validCTRL-X mode command) is mapped. Also, when doing completionwith'complete' mappings apply as usual.:inoremap <C-]> <C-X><C-]>:inoremap <C-F> <C-X><C-F>:inoremap <C-D> <C-X><C-D>:inoremap <C-L> <C-X><C-L>As a special case, typing
CTRL-R to perform register insertion (seei_CTRL-R) will not exitCTRL-X mode. This is primarily to allow the use ofthe '=' register to call some function to determine the next operation. Ifthe contents of the register (or result of the '=' register evaluation) arenot validCTRL-X mode keys, thenCTRL-X mode will be exited as if those keyshad been typed.<Tab> to either actually insert a<Tab> ifthe current line is currently only whitespace, or start/continue aCTRL-Ncompletion operation:function! CleverTab() if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$' return "\<Tab>" else return "\<C-N>" endifendfunctioninoremap <Tab> <C-R>=CleverTab()<CR>Completing whole linescompl-whole-lineCTRL-LSearch backwards for a line that starts with thesame characters as those in the current line beforethe cursor. Indent is ignored. The matching line isinserted in front of the cursor.The'complete' option is used to decide which buffersare searched for a match. Both loaded and unloadedbuffers are used.CTRL-LorCTRL-PSearch backwards for next matching line. This linereplaces the previous matching line.CTRL-NSearch forward for next matching line. This linereplaces the previous matching line.CTRL-XCTRL-LAfter expanding a line you can additionally get theline next to it by typingCTRL-XCTRL-L again, unlessa doubleCTRL-X is used. Only works for loadedbuffers.CTRL-NSearch forwards for words that start with the keywordin front of the cursor. The found keyword is insertedin front of the cursor.CTRL-PSearch backwards for words that start with the keywordin front of the cursor. The found keyword is insertedin front of the cursor.CTRL-NSearch forward for next matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-PSearch backwards for next matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-XCTRL-N orCTRL-XCTRL-PFurther use ofCTRL-XCTRL-N orCTRL-XCTRL-P willcopy the words following the previous expansion inother contexts unless a doubleCTRL-X is used.CTRL-N andCTRL-P (unless there is only onematching keyword).CTRL-XCTRL-P orCTRL-XCTRL-N to get theword following the expansion in other contexts. These sequences search forthe text just expanded and further expand by getting an extra word. This isuseful if you need to repeat a sequence of complicated words. AlthoughCTRL-PandCTRL-N look just for strings of at least two characters,CTRL-XCTRL-P andCTRL-XCTRL-N can be used to expand words of just one character.e.g., to get:Méxicoyou can type:M^N^P^X^P^X^PCTRL-N starts the expansion and thenCTRL-P takes back the single character"M", the next twoCTRL-XCTRL-P's get the words "é" and ";xico".CTRL-XCTRL-P orCTRL-XCTRL-N will searchfor those lines starting with this word.CTRL-KSearch the files given with the'dictionary' optionfor words that start with the keyword in front of thecursor. This is likeCTRL-N, but only the dictionaryfiles are searched, not the current file. The foundkeyword is inserted in front of the cursor. Thiscould potentially be pretty slow, since all matchesare found before the first match is used. By default,the'dictionary' option is empty.For suggestions where to find a list of words, see the'dictionary' option.'ignorecase','smartcase' and'infercase' apply.CTRL-KorCTRL-NSearch forward for next matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-PSearch backwards for next matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-TWorks asCTRL-XCTRL-K, but in a special way. It usesthe'thesaurus' option instead of'dictionary'. If amatch is found in the thesaurus file, all theremaining words on the same line are included asmatches, even though they don't complete the word.Thus a word can be completely replaced.CTRL-TorCTRL-NSearch forward for next matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-PSearch backwards for next matching keyword. Thiskeyword replaces the previous matching keyword.angry furious mad enragedPlacing the cursor after the letters "ang" and typing
CTRL-XCTRL-T wouldcomplete the word "angry"; subsequent presses would change the word to"furious", "mad" etc.func Thesaur(findstart, base) if a:findstart return searchpos('\<', 'bnW', line('.'))[1] - 1 endif let res = [] let h = '' for l in systemlist('aiksaurus ' .. shellescape(a:base)) if l[:3] == '=== ' let h = '(' .. substitute(l[4:], ' =*$', ')', '') elseif l ==# 'Alphabetically similar known words are: ' let h = "\U0001f52e" elseif l[0] =~ '\a' || (h ==# "\U0001f52e" && l[0] ==# "\t") call extend(res, map(split(substitute(l, '^\t', '', ''), ', '), {_, val -> {'word': val, 'menu': h}})) endif endfor return resendfuncif exists('+thesaurusfunc') set thesaurusfunc=ThesaurendifCompleting keywords in the current and included filescompl-keywordCTRL-ISearch for the first keyword in the current andincluded files that starts with the same charactersas those before the cursor. The matched keyword isinserted in front of the cursor.CTRL-NSearch forwards for next matching keyword. Thiskeyword replaces the previous matching keyword.Note:CTRL-I is the same as<Tab>, which is likely tobe typed after a successful completion, thereforeCTRL-I is not used for searching for the next match.CTRL-PSearch backward for previous matching keyword. Thiskeyword replaces the previous matching keyword.CTRL-XCTRL-IFurther use ofCTRL-XCTRL-I will copy the wordsfollowing the previous expansion in other contextsunless a doubleCTRL-X is used.CTRL-]Search for the first tag that starts with the samecharacters as before the cursor. The matching tag isinserted in front of the cursor. Alphabeticcharacters and characters in'iskeyword' are usedto decide which characters are included in the tagname (same as for a keyword). See alsoCTRL-].The'showfulltag' option can be used to add contextfrom around the tag definition.CTRL-]orCTRL-NSearch forwards for next matching tag. This tagreplaces the previous matching tag.CTRL-PSearch backward for previous matching tag. This tagreplaces the previous matching tag.CTRL-FSearch for the first file name that starts with thesame characters as before the cursor. The matchingfile name is inserted in front of the cursor.Alphabetic characters and characters in'isfname'are used to decide which characters are included inthe file name. Note: the'path' option is not usedhere (yet).CTRL-ForCTRL-NSearch forwards for next matching file name. Thisfile name replaces the previous matching file name.CTRL-PSearch backward for previous matching file name.This file name replaces the previous matching filename.CTRL-DSearch in the current and included files for thefirst definition (or macro) name that starts withthe same characters as before the cursor. The founddefinition name is inserted in front of the cursor.CTRL-DorCTRL-NSearch forwards for next matching macro name. Thismacro name replaces the previous matching macroname.CTRL-PSearch backward for previous matching macro name.This macro name replaces the previous matching macroname.CTRL-XCTRL-DFurther use ofCTRL-XCTRL-D will copy the wordsfollowing the previous expansion in other contextsunless a doubleCTRL-X is used.CTRL-VGuess what kind of item is in front of the cursor andfind the first match for it.Note: WhenCTRL-V is mapped you can often useCTRL-Qinstead ofi_CTRL-Q.CTRL-VorCTRL-NSearch forwards for next match. This match replacesthe previous one.CTRL-PSearch backwards for previous match. This matchreplaces the previous one.CTRL-XCTRL-VFurther use ofCTRL-XCTRL-V will do the same asCTRL-V. This allows mapping a key to do Vim commandcompletion, for example::imap <Tab> <C-X><C-V>Completing contents from registerscompl-register-words
CTRL-RGuess what kind of item is in front of the cursor fromall registers and find the first match for it.Further use ofCTRL-R (withoutCTRL-X) will insert theregister content, seei_CTRL-R.'ignorecase' applies to the matching.CTRL-NSearch forwards for next match. This match replacesthe previous one.CTRL-PSearch backwards for previous match. This matchreplaces the previous one.CTRL-XCTRL-RFurther use ofCTRL-XCTRL-R will copy the linefollowing the previous expansion in other contextsunless a doubleCTRL-X is used (e.g. this switchesfrom completing register words to register contents).CTRL-UGuess what kind of item is in front of the cursor andfind the first match for it.CTRL-UorCTRL-NUse the next match. This match replaces the previousone.CTRL-PUse the previous match. This match replaces theprevious one.CTRL-OGuess what kind of item is in front of the cursor andfind the first match for it.CTRL-OorCTRL-NUse the next match. This match replaces the previousone.CTRL-PUse the previous match. This match replaces theprevious one.CTRL-S suspends display in many Unix terminals. Use 's' instead. TypeCTRL-Q to resume displaying.CTRL-S orCTRL-X sLocate the word in front of the cursor and find thefirst spell suggestion for it.CTRL-SorCTRL-NUse the next suggestion. This replaces the previousone. Note that you can't use 's' here.CTRL-PUse the previous suggestion. This replaces theprevious one.CTRL-NSearch forward through the matches and insert thenext one.CTRL-PSearch backward through the matches and insert theprevious one.CTRL-XCTRL-N orCTRL-XCTRL-PFurther use ofCTRL-XCTRL-N orCTRL-XCTRL-P willcopy the words following the previous expansion inother contexts unless a doubleCTRL-X is used.set autocompleteset complete=.^5,w^5,b^5,u^5set completeopt=popupinoremap <silent><expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"inoremap <silent><expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
<Tab> and<S-Tab> move through the items when themenu is visible. Optionally, add "preinsert" to'completeopt' to insert thelongest common prefix automatically. You can also add other completionsources to'complete' as needed.let matches = ... list of words ...return {'words': matches, 'refresh': 'always'}fun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" let res = [] for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call add(res, m) endif endfor return res endifendfunset completefunc=CompleteMonthsfun! CompleteMonths(findstart, base) if a:findstart " locate the start of the word let line = getline('.') let start = col('.') - 1 while start > 0 && line[start - 1] =~ '\a' let start -= 1 endwhile return start else " find months matching with "a:base" for m in split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec") if m =~ '^' .. a:base call complete_add(m) endif sleep 300m" simulate searching for next match if complete_check() break endif endfor return [] endifendfunset completefunc=CompleteMonthsCTRL-N orCTRL-P.2. A cursor key has been used to select another match. The match was not inserted then, only the entry in the popup menu is highlighted.3. Only part of a match has been inserted and characters were typed or the backspace key was used. The list of matches was then adjusted for what is in front of the cursor.CTRL-N orCTRL-P, you go to the firststate. This doesn't change the list of matches.CTRL-P right afterstarting the completion::imap <F7> <C-N><C-P>
<BS> andCTRL-H Delete one character, find the matches for the word before the cursor. This reduces the list of matches, often to one entry, and switches to the second state. When'autocomplete' is active, clears the selected item in the menu.Any non-special character: Stop completion without changing the match and insert the typed character.<BS> andCTRL-H Delete one character, find the matches for the shorter word before the cursor. This may find more matches. When'autocomplete' is active, clears the selected item in the menu.CTRL-L Add one character from the current match, may reduce the number of matches.any printable, non-white character: Add this character and reduce the number of matches.<PageUp> Select a match several entries back, but don't insert it.<PageDown> Select a match several entries further, but don't insert it.<Up> Select the previous match, as ifCTRL-P was used, but don't insert it.<Down> Select the next match, as ifCTRL-N was used, but don't insert it.<Space> or<Tab> Stop completion without changing the match and insert the typed character.<Enter> key depends on the state you are in:first state: Use the text as it is and insert a line break.second state: Insert the currently selected match.third state: Use the text as it is and insert a line break.<Enter> key inserts that match. If you typedsomething else then<Enter> inserts a line break.:inoremap <Down> <C-R>=pumvisible() ? "\<lt>C-N>" : "\<lt>Down>"<CR>You can use of
<expr> in mapping to have the popup menu used when typing acharacter and some condition is met. For example, for typing a dot:inoremap <expr> . MayComplete()func MayComplete() if (can complete) return ".\<C-X>\<C-O>" endif return '.'endfuncSee:map-<expr> for more info.
{filetype} should be autoload/{filetype}complete.vimin'runtimepath'. Thus for "java" it is autoload/javacomplete.vim.% ctags -R -f ~/.config/nvim/systags /usr/include /usr/local/includeIn your vimrc file add this tags file to the'tags' option:
set tags+=~/.config/nvim/systagsWhen using
CTRL-XCTRL-O after a name without any "." or "->" it is completedfrom the tags file directly. This works for any identifier, also functionnames. If you want to complete a local variable name, which does not appearin the tags file, useCTRL-P instead.CTRL-XCTRL-O after something that has "." or "->" Vim will attemptto recognize the type of the variable and figure out what members it has.This means only members valid for the variable will be listed.CTRL-XCTRL-O will add a "." or"->" for composite types.CTRL-O provides completion of various elements of (X)HTML files. It isdesigned to support writing of XHTML 1.0 Strict files but will also work forother versions of HTML. Features:<style> tag and included CSS filesCTRL-XCTRL-O will close the last opened tag<script> tag of (X)HTML and in values of event attributes (including scanningof external files).IEFFW3C Omni completion ~+/-+/-+ + ~++- + ~+-- - ~-+- - ~
/* @var $myVar myClass */$myVar->
CTRL-XCTRL-O are sensitive to the context:let g:rubycomplete_buffer_loading = 1<- In context 1 above, Vim can parse the entire buffer to add a list of classes to the completion results. This feature is turned off by default, to enable it add
let g:rubycomplete_classes_in_global = 1
let g:rubycomplete_rails = 1
setlocal omnifunc=syntaxcomplete#CompleteYou can automate this by placing the following in yourinit.vim (after any":filetype" command):
if has("autocmd") && exists("+omnifunc") autocmd Filetype * \if &omnifunc == "" | \setlocal omnifunc=syntaxcomplete#Complete | \endifendifThe above will set completion to this script only if a specific plugin doesnot already exist for that filetype.syntax listThe first thing you will notice is that there are many different syntaxgroups. The PHP language can include elements from different languages likeHTML, JavaScript and many more. The syntax plugin will only include syntaxgroups that begin with the filetype, "php", in this case. For example thesesyntax groups are included by default with the PHP: phpEnvVar, phpIntVar,phpFunctions.
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjectsTo pick up any JavaScript and HTML keyword syntax groups while editing a PHPfile, you can use 3 different regexs, one for each language. Or you cansimply restrict the include groups to a particular value, without usinga regex string:
let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
let g:omni_syntax_group_include_{filetype} = 'regex,comma,separated'The PHP language has an enormous number of items which it knows how to syntaxhighlight. These items will be available within the omni completion list.let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'let g:omni_syntax_group_exclude_php = 'php\w*Constant'Add as many syntax groups to this list by comma separating them. The basicform of this variable is:
let g:omni_syntax_group_exclude_{filetype} = 'regex,comma,separated'You can create as many of these variables as you need, varying only thefiletype at the end of the variable name.let g:omni_syntax_use_iskeyword = 0For plugin developers, the plugin exposes a public function OmniSyntaxList.This function can be used to request a List of syntax items. When editing aSQL file (:e syntax.sql) you can use the ":syntax list" command to see thevarious groups and syntax items. For example:
syntax listYields data similar to this:
echo OmniSyntaxList( [] )To retrieve only the syntax items for the sqlOperator syntax group:
echo OmniSyntaxList( ['sqlOperator'] )To retrieve all syntax items for both the sqlOperator and sqlType groups:
echo OmniSyntaxList( ['sqlOperator', 'sqlType'] )A regular expression can also be used:
echo OmniSyntaxList( ['sql\w\+'] )From within a plugin, you would typically assign the output to a List:
let myKeywords = []let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
CTRL-XCTRL-O will close the last opened taglet g:xmldata_crippled = {\ "vimxmlentities": ["amp", "lt", "gt", "apos", "quot"],\ 'vimxmlroot': ['tag1'],\ 'tag1':\ [ ['childoftag1a', 'childoftag1b'], {'attroftag1a': [],\ 'attroftag1b': ['valueofattr1', 'valueofattr2']}],\ 'childoftag1a':\ [ [], {'attrofchild': ['attrofchild']}],\ 'childoftag1b':\ [ ['childoftag1a'], {'attrofchild': []}],\ "vimxmltaginfo": {\ 'tag1': ['Menu info', 'Long information visible in preview window']},\ 'vimxmlattrinfo': {\ 'attrofchild': ['Menu info', 'Long information visible in preview window']}}This example would be put in the "autoload/xml/crippled.vim" file and couldhelp to write this file:<tag1 attroftag1b="valueofattr1"> <childoftag1a attrofchild> & < </childoftag1a> <childoftag1b attrofchild="5"> <childoftag1a> > ' " </childoftag1a> </childoftag1b></tag1>In the example four special elements are visible:
:XMLns xhtml10s:XMLns xsl xsl:XMLent
{name}:XMLent:XMLent xhtml10sUsage
<|Will complete to an appropriate XHTML tag, and in this situation:
<xsl:|Will complete to an appropriate XSL tag.
:echo xmlcomplete#GetLastOpenTag("b:unaryTagsStack")<insert>oriinsert<Insert>iInsert text before the cursor [count] times.When usingCTRL-O in Insert modei_CTRL-O the countis not supported.<Esc>. Seemode-ins-repl for the other special characters in Insert mode.The effect of [count] takes place after Insert mode is exited.<Space>Insert an empty line above the cursor without leavingNormal mode, repeat [count] times.{range} is missing, the text will beinserted after the current line.Adding [!] toggles'autoindent' for the time thiscommand is executed.{range} is missing, the text will beinserted before the current line.Adding [!] toggles'autoindent' for the time thiscommand is executed.:a|onetwo.:visualappends the following text, after the cursor line:
onetwo
<Esc> in Insert mode.Can be used in an autocommand, example::au BufEnter scratch stopinsert
{cmd} and insert its standard output belowthe cursor or the specified line. A temporary file isused to store the output of the command which is thenread into the buffer.'shellredir' is used to savethe output of the command, which can be set to includestderr or not.{cmd} is executed like with ":!{cmd}",any '!' is replaced with the previous command:!.See++opt for the possible values of [++opt].{name}".:read ++edit filenameThe effect is that the'fileformat','fileencoding','bomb', etc. options areset to what has been detected for "filename". Note that a single empty lineremains, you may want to delete it.
<EOL> style for a file:<CR><NL> or<NL> DOS format "unix"<NL> Unix format "mac"<CR> Mac format<CR> in front of an<NL> is ignored and aCTRL-Zat the end of the file is ignored.<NL> in the file is internally represented by a<CR>. This is to avoid confusion with a<NL> which is used to represent a<NUL>. SeeCR-used-for-NL.<EOL> (seefile-formats). However, the'fileformat' option will not bechanged, the detected format is only used while reading the file.A similar thing happens with'fileencodings'.:r !uuencode binfile binfileThis command reads "binfile", uuencodes it and reads it into the currentbuffer. Useful when you are editing e-mail and want to include a binaryfile.
{RO}the file is write protected[fifo/socket]using a stream[fifo]using a fifo stream[socket]using a socket stream[CR missing]reading with "dos"'fileformat' and aNL without a preceding CR was found.[NL found]reading with "mac"'fileformat' and aNL was found (could be "unix" format)[long lines split]at least one line was split in two[NOT converted]conversion from'fileencoding' to'encoding' was desired but notpossible[converted]conversion from'fileencoding' to'encoding' done[READ ERRORS]not all of the file could be read