Vim is a very efficient text editor. This reference was made for Vim 8.0. 
For shortcut notation, see :help key-notation.
     
  
  
    Getting started
Exiting
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      :q | 
      Close file | 
    
    
      :qa | 
      Close all files | 
    
  
  
    
      :w | 
      Save | 
    
    
      :wq / :x | 
      Save and close file | 
    
  
  
    
      ZZ | 
      Save and quit | 
    
    
      ZQ | 
      Quit without checking changes | 
    
  
Navigating
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      h j k l | 
      Arrow keys | 
    
    
      <C-U> / <C-D> | 
      Half-page up/down | 
    
    
      <C-B> / <C-F> | 
      Page up/down | 
    
  
Words
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      b / w | 
      Previous/next word | 
    
    
      ge / e | 
      Previous/next end of word | 
    
  
Line
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      0 (zero) | 
      Start of line | 
    
    
      ^ | 
      Start of line (after whitespace) | 
    
    
      $ | 
      End of line | 
    
  
Character
  
    
      fc | 
      Go forward to character c | 
    
    
      Fc | 
      Go backward to character c | 
    
  
Document
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      gg | 
      First line | 
    
    
      G | 
      Last line | 
    
    
      :{number} | 
      Go to line {number} | 
    
    
      {number}G | 
      Go to line {number} | 
    
    
      {number}j | 
      Go down {number} lines | 
    
    
      {number}k | 
      Go up {number} lines | 
    
  
Window
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      zz | 
      Center this line | 
    
    
      zt | 
      Top this line | 
    
    
      zb | 
      Bottom this line | 
    
    
      H | 
      Move to top of screen | 
    
    
      M | 
      Move to middle of screen | 
    
    
      L | 
      Move to bottom of screen | 
    
  
Search
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      n | 
      Next matching search pattern | 
    
    
      N | 
      Previous match | 
    
    
      * | 
      Next whole word under cursor | 
    
    
      # | 
      Previous whole word under cursor | 
    
  
Tab pages
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      :tabedit [file] | 
      Edit file in a new tab | 
    
    
      :tabfind [file] | 
      Open file if exists in new tab | 
    
    
      :tabclose | 
      Close current tab | 
    
    
      :tabs | 
      List all tabs | 
    
    
      :tabfirst | 
      Go to first tab | 
    
    
      :tablast | 
      Go to last tab | 
    
    
      :tabn     | 
      Go to next tab | 
    
    
      :tabp     | 
      Go to previous tab | 
    
  
Editing
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      a | 
      Append | 
    
    
      A | 
      Append from end of line | 
    
    
      i | 
      Insert | 
    
    
      o | 
      Next line | 
    
    
      O | 
      Previous line | 
    
  
  
    
      s | 
      Delete char and insert | 
    
    
      S | 
      Delete line and insert | 
    
    
      C | 
      Delete until end of line and insert | 
    
  
  
    
      r | 
      Replace one character | 
    
    
      R | 
      Enter Replace mode | 
    
  
  
    
      u | 
      Undo changes | 
    
    
      <C-R> | 
      Redo changes | 
    
  
Exiting insert mode
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      Esc / <C-[> | 
      Exit insert mode | 
    
    
      <C-C> | 
      Exit insert mode, and abort current command | 
    
  
Clipboard
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      x | 
      Delete character | 
    
  
  
    
      dd | 
      Delete line (Cut) | 
    
    
      yy | 
      Yank line (Copy) | 
    
  
  
    
      p | 
      Paste | 
    
    
      P | 
      Paste before | 
    
  
  
    
      "*p / "+p | 
      Paste from system clipboard | 
    
    
      "*y / "+y | 
      Paste to system clipboard | 
    
  
Visual mode
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      v | 
      Enter visual mode | 
    
    
      V | 
      Enter visual line mode | 
    
    
      <C-V> | 
      Enter visual block mode | 
    
  
In visual mode
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      d / x | 
      Delete selection | 
    
    
      s | 
      Replace selection | 
    
    
      y | 
      Yank selection (Copy) | 
    
  
See Operators for other things you can do.
Find & Replace
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      | :%s/foo/bar/g | 
      Replace foo with bar in whole document | 
    
  
Operators
Usage
Operators let you operate in a range of text (defined by motion). These are performed in normal mode.
Operators list
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      d | 
      Delete | 
    
    
      y | 
      Yank (copy) | 
    
    
      c | 
      Change (delete then insert) | 
    
  
  
    
      > | 
      Indent right | 
    
    
      < | 
      Indent left | 
    
    
      = | 
      Autoindent | 
    
  
  
    
      g~ | 
      Swap case | 
    
    
      gU | 
      Uppercase | 
    
    
      gu | 
      Lowercase | 
    
  
  
    
      ! | 
      Filter through external program | 
    
  
See :help operator
Examples
Combine operators with motions to use them.
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      dd | 
      (repeat the letter) Delete current line | 
    
    
      dw | 
      Delete to next word | 
    
    
      db | 
      Delete to beginning of word | 
    
    
      2dd | 
      Delete 2 lines | 
    
    
      dip | 
      Delete a text object (inside paragraph) | 
    
    
      (in visual mode) d | 
      Delete selection | 
    
  
See: :help motion.txt
Text objects
Usage
Text objects let you operate (with an operator) in or around text blocks (objects).
  
    
      v | 
      i | 
      p | 
    
    
      | Operator | 
      [i]nside or [a]round | 
      Text object | 
    
  
Text objects
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      p | 
      Paragraph | 
    
    
      w | 
      Word | 
    
    
      s | 
      Sentence | 
    
  
  
    
      [ ( { < | 
      A [], (), or {} block | 
    
    
      ' " ` | 
      A quoted string | 
    
  
  
    
      b | 
      A block [( | 
    
    
      B | 
      A block in [{ | 
    
    
      t | 
      A XML tag block | 
    
  
Examples
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      vip | 
      Select paragraph | 
    
    
      vipipipip | 
      Select more | 
    
  
  
    
      yip | 
      Yank inner paragraph | 
    
    
      yap | 
      Yank paragraph (including newline) | 
    
  
  
    
      dip | 
      Delete inner paragraph | 
    
    
      cip | 
      Change inner paragraph | 
    
  
See Operators for other things you can do.
Diff
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      gvimdiff file1 file2 [file3] | 
      See differences between files, in HMI | 
    
  
Misc
Folds
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      zo / zO | 
      Open | 
    
    
      zc / zC | 
      Close | 
    
    
      za / zA | 
      Toggle | 
    
  
  
    
      zv | 
      Open folds for this line | 
    
  
  
    
      zM | 
      Close all | 
    
    
      zR | 
      Open all | 
    
  
  
    
      zm | 
      Fold more (foldlevel += 1) | 
    
    
      zr | 
      Fold less (foldlevel -= 1) | 
    
  
  
    
      zx | 
      Update folds | 
    
  
Uppercase ones are recursive (eg, zO is open recursively).
Navigation
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      % | 
      Nearest/matching {[()]} | 
    
    
      [( [{ [< | 
      Previous ( or { or < | 
    
    
      ]) | 
      Next | 
    
  
  
    
      [m | 
      Previous method start | 
    
    
      [M | 
      Previous method end | 
    
  
Jumping
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      <C-O> | 
      Go back to previous location | 
    
    
      <C-I> | 
      Go forward | 
    
  
  
    
      gf | 
      Go to file in cursor | 
    
  
Counters
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      <C-A> | 
      Increment number | 
    
    
      <C-X> | 
      Decrement | 
    
  
Windows
  
    
      z{height}<Cr> | 
      Resize pane to {height} lines tall | 
    
  
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      :tag Classname | 
      Jump to first definition of Classname | 
    
  
  
    
      <C-]> | 
      Jump to definition | 
    
    
      g] | 
      See all definitions | 
    
    
      <C-T> | 
      Go back to last tag | 
    
    
      <C-O> <C-I> | 
      Back/forward | 
    
  
  
    
      :tselect Classname | 
      Find definitions of Classname | 
    
    
      :tjump Classname | 
      Find definitions of Classname (auto-select 1st) | 
    
  
Case
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      ~ | 
      Toggle case (Case => cASE) | 
    
    
      gU | 
      Uppercase | 
    
    
      gu | 
      Lowercase | 
    
  
  
    
      gUU | 
      Uppercase current line (also gUgU) | 
    
    
      guu | 
      Lowercase current line (also gugu) | 
    
  
Do these in visual or normal mode.
Marks
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      `^ | 
      Last position of cursor in insert mode | 
    
    
      `. | 
      Last change in current buffer | 
    
    
      `" | 
      Last exited current buffer | 
    
    
      `0 | 
      In last file edited | 
    
    
      '' | 
      Back to line in current buffer where jumped from | 
    
    
      `` | 
      Back to position in current buffer where jumped from | 
    
    
      `[ | 
      To beginning of previously changed or yanked text | 
    
    
      `] | 
      To end of previously changed or yanked text | 
    
    
      `< | 
      To beginning of last visual selection | 
    
    
      `> | 
      To end of last visual selection | 
    
  
  
    
      ma | 
      Mark this cursor position as a | 
    
    
      `a | 
      Jump to the cursor position a | 
    
    
      'a | 
      Jump to the beginning of the line with position a | 
    
    
      d'a | 
      Delete from current line to line of mark a | 
    
    
      d`a | 
      Delete from current position to position of mark a | 
    
    
      c'a | 
      Change text from current line to line of a | 
    
    
      y`a | 
      Yank text from current position to position of a | 
    
  
  
    
      :marks | 
      List all current marks | 
    
    
      :delm a | 
      Delete mark a | 
    
    
      :delm a-d | 
      Delete marks a, b, c, d | 
    
    
      :delm abc | 
      Delete marks a, b, c | 
    
  
Misc
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      . | 
      Repeat last command | 
    
    
      ]p | 
      Paste under the current indentation level | 
    
  
  
    
      :set ff=unix | 
      Convert Windows line endings to Unix line endings | 
    
  
Command line
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      <C-R><C-W> | 
      Insert current word into the command line | 
    
    
      <C-R>" | 
      Paste from “ register | 
    
    
      <C-X><C-F> | 
      Auto-completion of path in insert mode | 
    
  
Text alignment
:center [width]
:right [width]
:left
See :help formatting
Calculator
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      <C-R>=128/2 | 
      Shows the result of the division : ‘64’ | 
    
  
Do this in insert mode.
Exiting with an error
:cq
:cquit
Works like :qa, but throws an error. Great for aborting Git commands.
Spell checking
  
    
      | Shortcut | 
      Description | 
    
  
  
    
      :set spell spelllang=en_us | 
      Turn on US English spell checking | 
    
    
      ]s | 
      Move to next misspelled word after the cursor | 
    
    
      [s | 
      Move to previous misspelled word before the cursor | 
    
    
      z= | 
      Suggest spellings for the word under/after the cursor | 
    
    
      zg | 
      Add word to spell list | 
    
    
      zw | 
      Mark word as bad/misspelling | 
    
    
      zu / C-X (Insert Mode) | 
      Suggest words for bad word under cursor from spellfile | 
    
  
See :help spell
Also see
  
0 Comments for this cheatsheet. Write yours!