= Keys == Key Syntax Usual keys are written using their ascii character, including capital keys. Non printable keys use an alternate name, written between *<* and *>*, such as ** or **. Modified keys are written between *<* and *>* as well, with the modifier specified as either *c* for Control, or *a* for Alt, followed by a *-* and the key (either its name or ascii character), for example **, **. In order to bind some keys to arbitrary ones, refer to the 'mapping' documentation page. == Insert mode **:: leave insert mode **:: delete characters before cursors **:: delete characters under cursors **, **, **, **:: move the cursors in given direction **:: move cursors to line begin **:: move cursors to end of line **:: select next completion candidate **:: select previous completion candidate **:: explicit insert completion query, followed by: *f*::: explicit file completion *w*::: explicit word completion (current buffer) *W*::: explicit word completion (all buffers) *l*::: explicit line completion **:: disable automatic completion for this insert session **:: insert contents of the register given by next key **:: insert next keystroke directly into the buffer, without interpreting it **:: commit changes up to now as a single undo group **:: escape to normal mode for a single command == Using Counts In normal mode, commands can be prefixed with a numeric count, which can control the command behaviour. For example, *3W* selects 3 consecutive words and *3w* select the third word on the right of selection end. == Disabling Hooks Any normal mode command can be prefixed with *\* which will disable hook execution for the duration for the command (including the duration of modes the command could move to, so *\i* will disable hooks for the whole insert session). As autoindentation is implemented in terms of hooks, this can be used to disable it when pasting text. == Movement 'word' is a sequence of alphanumeric characters or underscore, and 'WORD' is a sequence of non whitespace characters *h*:: select the character on the left of selection end *j*:: select the character below the selection end *k*:: select the character above the selection end *l*:: select the character on the right of selection end *w*:: select the word and following whitespaces on the right of selection end *b*:: select preceding whitespaces and the word on the left of selection end *e*:: select preceding whitespaces and the word on the right of selection end **:: same as [wbe] but select WORD instead of word *f*:: select to the next occurrence of given character *t*:: select until the next occurrence of given character **:: same as [ft] but in the other direction *m*:: select to matching character *M*:: extend selection to matching character *x*:: select line on which selection end lies (or next line when end lies on an end-of-line) *X*:: similar to *x*, except the current selection is extended **:: expand selections to contain full lines (including end-of-lines) **:: trim selections to only contain full lines (not including last end-of-line) *%*:: select whole buffer **:: select to line begin **:: select to line end */*:: search (select next match) **:: search (select previous match) *?*:: search (extend to next match) **:: search (extend to previous match) *n*:: select next match *N*:: add a new selection with next match **:: select previous match **:: add a new selection with previous match *pageup, *:: scroll one page up *pagedown, *:: scroll one page down **:: scroll half a page up **:: scroll half a page down *'*:: rotate selections (the main selection becomes the next one) **:: rotate selections backwards *;*:: reduce selections to their cursor **:: flip the selections direction **:: ensure selections are in forward direction (cursor after anchor) **:: repeat last object or *f*/*t* selection command == Changes *i*:: enter insert mode before current selection *a*:: enter insert mode after current selection *d*:: yank and delete current selection *c*:: yank and delete current selection and enter insert mode *.*:: repeat last insert mode change (*i*, *a*, or *c*, including the inserted text) **:: delete current selection (not yanking) **:: delete current selection and enter insert mode (not yanking) *I*:: enter insert mode at current selection begin line start *A*:: enter insert mode at current selection end line end *o*:: enter insert mode in a new line (or in a given count of new lines) below current selection end *O*:: enter insert mode in a new line (or in a given count of new lines) above current selection begin **:: add an empty line below cursor **:: add an empty line above cursor *y*:: yank selections *p*:: paste after current selection end *P*:: paste before current selection begin **:: paste all after current selection end, and select each pasted string **:: paste all before current selection begin, and select each pasted string *R*:: replace current selection with yanked text **:: replace current selection with every yanked text *r*:: replace each character with the next entered one **:: join selected lines **:: join selected lines and select spaces inserted in place of line breaks **:: merge contiguous selections together (works across lines as well) *>*:: indent selected lines *>*:: indent selected lines, including empty lines *<*:: deindent selected lines **:: deindent selected lines, do not remove incomplete indent (3 leading spaces when indent is 4) *|*:: pipe each selection through the given external filter program and replace the selection with its output **:: pipe each selection through the given external filter program and ignore its output *!*:: insert command output before selection **:: append command output after selection *u*:: undo last change **:: move backward in history *U*:: redo last change **:: move forward in history *&*:: align selection, align the cursor of selections by inserting spaces before the first character of the selection **:: copy indent, copy the indentation of the main selection (or the count one if a count is given) to all other ones *`*:: to lower case *~*:: to upper case **:: swap case *@*:: convert tabs to spaces in current selections, uses the buffer tabstop option or the count parameter for tabstop **:: convert spaces to tabs in current selections, uses the buffer tabstop option or the count parameter for tabstop **:: rotate selections content, if specified, the count groups selections, so the following command ---------- 3 ---------- rotate (1, 2, 3) and (3, 4, 6) independently == Goto Commands *g*, *G*:: When a count is specified, *G* only extends the current selection to the given line, *g* sends the anchor to the given line and a menu is then displayed which waits for one of the following additional keys: *h*::: go to line begin *l*::: go to line end *i*::: go to non blank line start *g*, *k*::: go to the first line *j*::: go to the last line *e*::: go to last char of last line *t*::: go to the first displayed line *c*::: go to the middle displayed line *b*::: go to the last displayed line *a*::: go to the previous (alternate) buffer *f*::: open the file whose name is selected *.*::: go to last buffer modification position == View commands *v*, *V*:: *V* enters lock view mode (which will be left when the is hit), and *v* modifies the current view; a menu is then displayed which waits for one of the following additional keys: *v*, *c*::: center the main selection in the window (vertically) *m*::: center the main selection in the window (horizontally) *t*::: scroll to put the main selection on the top line of the window *b*::: scroll to put the main selection on the bottom line of the window *h*::: scroll the window count columns left *j*::: scroll the window count line downward *k*::: scroll the window count line upward *l*::: scroll the window count columns right == Marks Marks use the *^* register by default. *Z*:: save the current selections to the register *z*:: restore the selections from the register **, **:: ** combines the selections from the register with the current ones, whereas ** combines the current selections with the register; a menu is then displayed which waits for one of the following additional keys: *a*::: append the selections *u*::: keep a union of the selections *i*::: keep an intersection of the selections *<*::: select the selection with the leftmost cursor for each pair *>*::: select the selection with the rightmost cursor for each pair *+*::: select the longest selection *-*::: select the shortest selection == Macros Macros use the *@* register by default **:: end macro recording *Q*:: start or end macro recording *q*:: play a recorded macro == Searching Searches use the */* register by default ***:: set the search pattern to the current selection (automatically detects word boundaries) **:: set the search pattern to the current selection (verbatim, no smart detection) == Jump list **:: Jump forward **:: Jump backward **:: save current selections == Multiple selections *s*:: create a selection **:: split the current selections on line boundaries *S*:: split the current selection *C*:: copy the current selection to the next line **:: copy the current selection to the previous line **:: clear a multiple selection **:: clear the current selection **:: keep the selections that match the given regex **:: clear selections that match the given regex *$*:: pipe each selection to the given shell command and keep the ones for which the shell returned 0 == Object Selection **:: selects the whole object **:: selects the inner object, that is the object excluding its surrounder *[*:: selects to object start *]*:: selects to object end *{*:: extends selections to object start *}*:: extends selections to object end After these keys, you need to enter a second key in order to specify which object you want *b*, *(*, *)*:: select the enclosing parenthesis *B*, *{*, *}*:: select the enclosing {} block *r*, *[*, *]*:: select the enclosing [] block *a*, *<*, *>*:: select the enclosing <> block *"*, *Q*:: select the enclosing double quoted string *'*, *q*:: select the enclosing single quoted string *`*, *g*:: select the enclosing grave quoted string *w*:: select the whole word *W*:: select the whole WORD *s*:: select the sentence *p*:: select the paragraph *␣*:: select the whitespaces *i*:: select the current indentation block *n*:: select the number *u*:: select the argument *c*:: select user defined object, will prompt for open and close text == Prompt Commands **:: validate prompt **:: abandon without **, **:: move cursor to previous character **, **:: move cursor to previous character **:: move cursor to first character **:: move cursor past the last character **, **:: erase character before cursor **, **:: erase character under cursor **:: avance to next word begin **:: advance to next WORD begin **:: go back to previous word begin **:: go back to previous WORD begin **:: advance to next word end **:: advance to next word end **, **:: select previous entry in history **, **:: select next entry in history **:: select next completion candidate **:: select previous completion candidate **:: insert then content of the register given by next key **:: insert next keystroke without interpreting it **:: disable auto completion for this prompt