vi Cheat Sheet

Author: MikeW    Date: 2016-09-06 22:02   


Cursor movement [+/-] Command Mode

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

Inserting/Appending [+/-] Insert Mode

  • 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

Cut and Paste [+/-] Command Mode

  • 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

Search/Replace [+/-] Command Mode

  • /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

Editing [+/-] Command Mode

  • 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

Exiting [+/-] Command Mode

  • :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

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 [+/-] Visual Mode

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

Working with multiple files [+/-] Command Mode

  • :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

Based off originial cheat sheet found here.