(Thanks to Dr. Taylor for this quick-start guide.)
First, some language: there are three common versions of
vi is the simplest, and will open directly in your terminal, not
as a separate window.
vim is "vi improved," and (most
crucially) has syntax highlighting.
gvim is "graphical
vim," and will open a new window with clickable buttons that copy, paste,
save, and all sorts of other things that are helpful when you're first getting
started. All three are colloquially referred to as "vi" (pronounced
The goal of vi is to never use the mouse or arrow keys - if you are, you're not using it right. So, you need keyboard shortcuts for everything you might want to do (copy, paste, save, open a new file, move around, etc.). As a result, vi has two modes: "insert mode," which is when you're actually typing text into your file, and "normal mode," which is when all your keys get remapped to allow you to do everything else you might want to do. As you might guess by the names, when you're good at vi, you spend more time in "normal mode" than actually typing!
vi has a learning curve which can seem steep. However, it will save you a LOT of time in the long run. A LOT.
Below are some of the shortcuts I use most often to help get you started. This is a very, very small subset of the things you can do in vi. Start with even a subset of these which seem most useful to you, and add more as you get better.
Going from insert mode to normal mode
Going from normal mode to insert mode
i: insert - enter insert mode just before the cursor
a: append - enter insert mode just after the cursor
I: Insert - enter insert mode at the beginning of the line
A: Append - enter insert mode at the end of the line
Moving around the file
h: move left one character
j: move down one line
k: move up one line
l: move right one character
w: move right one word
b: move left one word
0: move to the beginning of the line
$: move to the end of the line
G: move to the last line in the file
G: move to line [number]. For example, typing
19Gwould take you to line 19.
/: used to search.
/some wordsfollowed by an Enter will take you to the next instance of "some words". Underrated by beginners, used heavily by experts.
n: move to the next instance of what you just searched for
N: move to the previous instance of what you just searched for
cfollowed by a move command : change - performs the move command, deleting everything it passes over, and enters insert mode. For example,
cwdeletes the word after your cursor, and enters insert mode so you can replace it.
dfollowed by a move command : delete - performs the move command, deleting everything it passes over. Stays in normal mode. delete is the same thing as cutting in vi. The text you deleted is now on your clipboard.
yfollowed by a move command: yank - copies everything the cursor passes over.
cc: "changes" the current line
dd: "deletes (cuts)" the current line
yy: "yanks" the current line
v: enters "visual mode", where you can use the move commands to highlight part of the text. Then hit
yto change, delete (cut), or yank (copy).
V: same as
v, but selects entire lines
p: pastes after the cursor
P: pastes before the cursor
:w: write - saves the file under its current name (follow with an Enter)
:w filename: save as filename (follow with an Enter)
:q: quit (follow with an Enter)
:wq: save and quit (follow with an Enter)
:e filename: exit this file, and open up
filenameinstead (follow with an Enter)