Table of Contents

vi

Cursor movement

  h - move left
  j - move down
  k - move up
  l - move right
  w - jump by start of words (punctuation considered words)
  W - jump by words (spaces separate words)
  e - jump to end of words (punctuation considered words)
  E - jump to end of words (no punctuation)
  b - jump backward by words (punctuation considered words)
  B - jump backward by words (no punctuation)
  0 - (zero) start of line
  ^ - first non-blank character of line
  $ - end of line
  G - Go To command (prefix with number - 5G goes to line 5)
Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.

Insert Mode – Inserting/Appending text

  i - start insert mode at cursor
  I - insert at the beginning of the line
  a - append after the cursor
  A - append at the end of the line
  o - open (append) blank line below current line (no need to press return)
  O - open blank line above current line
  ea - append at end of word
  Esc - exit insert mode

Editing

  r - replace a single character (does not use insert mode)
  J - join line below to the current one
  cc - change (replace) an entire line
  cw - change (replace) to the end of word
  c$ - change (replace) to the end of line
  s - delete character at cursor and subsitute text
  S - delete line at cursor and substitute text (same as cc)
  xp - transpose two letters (delete and paste, technically)
  u - undo
  . - repeat last command

Marking text (visual mode)

  v - start visual mode, mark lines, then do command (such as y-yank)
  V - start Linewise visual mode
  o - move to other end of marked area
  Ctrl+v - start visual block mode
  O - move to Other corner of block
  aw - mark a word
  ab - a () block (with braces)
  aB - a {} block (with brackets)
  ib - inner () block
  iB - inner {} block
  Esc - exit visual mode

Visual commands

  > - shift right
  < - shift left
  y - yank (copy) marked text
  d - delete marked text
  ~ - switch case

Cut and Paste

  yy - yank (copy) a line
  2yy - yank 2 lines
  yw - yank word
  y$ - yank to end of line
  p - put (paste) the clipboard after cursor
  P - put (paste) before cursor
  dd - delete (cut) a line
  dw - delete (cut) the current word
  x - delete (cut) current character

Exiting

  :w - write (save) the file, but don't exit
  :wq - write (save) and quit
  :q - quit (fails if anything has changed)
  :q! - quit and throw away changes

Search/Replace

  /pattern - search for pattern
  ?pattern - search backward for pattern
  n - repeat search in same direction
  N - repeat search in opposite direction
  :%s/old/new/g - replace all old with new throughout file
  :%s/old/new/gc - replace all old with new throughout file with confirmations

Working with multiple files

  :e filename - Edit a file in a new buffer
  :bnext (or :bn) - go to next buffer
  :bprev (of :bp) - go to previous buffer
  :bd - delete a buffer (close a file)
  :sp filename - Open a file in a new buffer and split window
  ctrl+ws - Split windows
  ctrl+ww - switch between windows
  ctrl+wq - Quit a window
  ctrl+wv - Split windows vertically

Line Numbers

:set number