Vim Cheat Sheet

The vi/vim Editor

  • There are two versatile editors in UNIX – vi and emacs.
  • vi is a full-screen editor. It was created by a graduate student – Bill Joy – later to become the cofounder of Sun Microsystems.
  • vim (vi improved) is a well-known vi editor in Linux. Bram Moolenaar has made three notable improvements – multiple windows, highlighting text, and command history.


:q[uit] Quit Vim. This fails when changes have been made.
:q[uit]! Quit without writing.
:cq[uit] Quit always, without writing.
:wq Write the current file and exit.
:wq! Write the current file and exit always.
:wq {file} Write to {file}. Exit if not editing the last
:wq! {file} Write to {file} and exit always.
:[range]wq[!] [file] Same as above, but only write the lines in [range].
ZZ Write current file, if modified, and exit.
ZQ Quit current file and exit (same as “:q!”).


:e[dit] Edit the current file. This is useful to re-edit the current file, when it has been changed outside of Vim.
:e[dit]! Edit the current file always. Discard any changes to the current buffer. This is useful if you want to start all over again.
:e[dit] {file} Edit {file}.
:e[dit]! {file} Edit {file} always. Discard any changes to the current buffer.
gf Edit the file whose name is under or after the cursor. Mnemonic: “goto file”.


a Append text after the cursor [count] times.
A Append text at the end of the line [count] times.
i Insert text before the cursor [count] times.
I Insert text before the first non-blank in the line [count] times.
gI Insert text in column 1 [count] times.
o Begin a new line below the cursor and insert text, repeat [count] times.
O Begin a new line above the cursor and insert text, repeat [count] times.
ea Insert (append) at the end of the line
Esc Exit insert mode


:r[ead] [name] Insert the file [name] below the cursor.
:r[ead] !{cmd} Execute {cmd} and insert its standard output below the cursor.


[Del] or
Delete [count] characters under and after the cursor
X Delete [count] characters before the cursor
d{motion} Delete text that {motion} moves over
dd Delete [count] lines
2dd Delete (cut) 2 lines
D Delete the characters under the cursor until the end of the line
dw Delete (cut) the word
d$ Delete (cut) to the end of the line
{Visual}x or
Delete the highlighted text (for {Visual} see Selecting Text).
{Visual}CTRL-H or
When in Select mode: Delete the highlighted text
{Visual}X or
Delete the highlighted lines
:[range]d[elete] Delete [range] lines (default: current line)
:[range]d[elete] {count} Delete {count} lines, starting with [range]

Partner Sites