A self-compiled cheatsheet for usage of vi

Posted March 9, 2022 by Adrian Wyssmann


vim knows different modes

Mode Description
normal mode This is the standard mode when you enter vim. Here you can move around but not modify text unless you issue a command lik insert or append
insert mode In the insert mode you can modify the text. Importantly to notice is that you will see -- INSERT -- on the last line. In this mode you can move with the arrow keys. To exit this mode, you have to press [ESC]
visual mode In the visual mode you can navigate and manipulate text selections. It is similar to normal mode and you can perform the same commands.
ex-mode This mode allows you to enter ex commands as you can do in the command line. Unless the command line, the ex-mode does not return automatically to the normal mode. Note that the Ex mode is designed for Batch processing and as such won’t support mappings or command-line editing. This mode is entered with Q and exited by entering :visual

command line

On the command line allows you to run ex commands enter search patterns, and enter filter commands. As soon as you start typing : or / you are on the command line and you can enter commands. After that vim automatically return to normal mode.


Many commands that change text are made from an operator and a motion so e.g. an example of deleting text with d

d motion
  • d is the delete operator
  • motion is what the operator will operate on e.g. w would delete text until the start of the next word, EXCLUDING its first character.

Also know that a word

  • punctuation considered words
  • spaces separates words

Editing a file

Command Description
: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”.


Keys Description
u undo
Ctrl+r redo
. repeat last command

Cursor movement (Inside command/normal mode)

Keys Command Description
h move cursor left
j move cursor down
k move cursor up
l move cursor 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 (same as 0w)
$ end of line
Ctrl+d move down half a page
Ctrl+u move up half a page
} go forward by paragraph (the next blank line)
{ go backward by paragraph (the next blank line)
gg go to the top of the page
G go the bottom of the page
[num] G :[num] [enter] Go to that line in the document

Search and Replace

Keys Command Description
f [char] Move to the next char on the current line after the cursor
F [char] Move to the next char on the current line before the cursor
t [char] Move to before the next char on the current line after the cursor
T [char] Move to before the next char on the current line before the cursor
; go to the next searched item
, go to the previous searched item
/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 (gn is better though)
:%s/old/new/gc replace all old with new throughout file with confirmations

Insert/Appending/Editing Text

Any of these results in Insert mode. Press Esc or Ctrl+[ to exit insert mode

Keys/Command Description
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
cc change (replace) an entire line
c [movement command] change (replace) from the cursor to the move-to point
r [char] replace a single character with the specified char (does not use Insert mode)
d delete
d [movement command] deletes from the cursor to the move-to point
dd delete the current line
J join line below to the current one
:r[ead] {name} Insert the file [name] below the cursor.
:r[ead] !{cmd} Execute {cmd} and insert its standard output below the cursor.

Marking text (visual mode)

In visual mode you can move around as in normal mode (h, j, k, l etc.) and can then do a command (such as y, d, or c)

Keys Command Description
v starts visual mode
V starts line-wise visual mode
Ctrl+v starts visual block mode
Esc or Ctrl+[ exit visual mode
O move to other corner of block

Cut and paste

Keys Description
y yank (copy) marked text
d delete marked text
c delete the marked text and go into insert mode (like c does above)
yy yank (copy) a line
p put (paste) the clipboard after cursor
P put (paste) before cursor
dd delete (cut) a line
x delete (cut) current character
X delete previous character (like backspace)


Keys/Commands Description
: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!)


Marks allow you to jump to designated points in your code.

Keys Description
m{a-z} Set mark {a-z} at cursor position. A capital mark {A-Z} sets a global mark and will work between files
‘{a-z} move the cursor to the start of the line where the mark was set
‘’ go back to the previous jump location

Split Windows

Keys Command Description
Ctrl-wn :new new horizontal split (editing a new empty buffer)
Ctrl-ws :split split window horizontally (editing current buffer)
Ctrl-wv :vsplit or :vsp split window vertically (editing current buffer)
Ctrl-wc :close close window
Ctrl-wo :only close all windows, leaving :only the current window open
Ctrl-ww go to next window
Ctrl-wp go to previous window
Ctrl-wq :exit quit a window
Ctrl-w<Up> go to window above
Ctrl-w<Down> go to window below
Ctrl-w<Left> go to window on left
Ctrl-w<Right> go to window on right

:vsplit {filename} use the filename for the split command


Keys Command Description
:tabe Make a new tab
:tabnew To open an existing file in a new tab
:tabedit [FILENAME] To open an existing file in a new tab
Ctrl-PageDown or gt :tabn next tab
Ctrl-PageUp or gT :tabp previous tab
:tabc close current tab
:tabo close all other tabs leaving ONLY the current tab open

Edit this page