This post will represent some running notes regarding the use of the Vim editor. Why should you use something as arcane as Vim you ask? Well, sometimes you find yourself on a server or something that doesn’t have any other editors, so you should be know some Vim basics. Plus, it’s fun.
Vim is built on vi, an even more bare-bones editor. At the outset you should know that Vim has two modes, normal or command mode, and edit or insert mode. You add words and stuff in edit mode, and you perform operations like searching, saving, and moving around in normal, or command mode. (I prefer the edit/command terminology.) You can always get into the command mode by hitting ESC
.
Oh my God. How do I get out.
This will probably be your initial reaction once you start using Vim. In order to quit the application you need to hit ESC
to enter command mode, and then either :q!
to quit without saving, or :wq
for write and quit. Below is a table of useful get-me-out commands. Remember to hit ESC
to get into command mode, and then hit Enter
to execute the command. You’ll see the command at the bottom line of the terminal.
Command | Action |
---|---|
:w |
Save (write) |
:w! |
Save, ignoring warnings |
:q |
Quit |
:q! |
Quit, ignoring warnings |
:x |
Save and quit |
:wq |
Save and quit |
ZZ |
Save and quit |
You might be asking yourself, or me, “Where did ZZ
come from?” I do not know. It was there when I learned all of this.
Moving around using commands instead of your arrow keys
Moving around at the dead nuts level is accomplished using the HJKL
keys. The logic is that using these little guys, you don’t have to move your right hand four inches to the right to fiddle with the arrow keys. When you get used to it, you get it, but that’s how it is with most things.
Command | Action |
---|---|
h |
Left |
j |
Down |
k |
Up |
l |
Right |
So that’s cool, but it kind of feels like you’re crawling through words. Stay cool, it gets better. You can move through a line of text by word, by sentence, or paragraph. You can emulate the same thing in other text editors by holding CTRL
while you use the arrow keys. Here, w,W
means that you can use either a lower case w
, or an upper case W
. These same goes for the rest of the comma delimited commands.
Command | Action |
---|---|
w,W |
Go to the next word |
b,B |
Go back a word |
e,E |
Go to the end of a word |
0 |
Go to the beginning of the line |
^ |
Like 0 , but ignores whitespace |
$ |
Go to the end of the line |
),( |
Move fw/bw by sentence |
},{ |
Move fw/bw by paragraph |
g |
Jump to the top of the document |
G |
Jump to the bottom of the document |
#G |
Jump to line #, e.g., `45G` |
CTRL+O |
Jump to your previous location |
CTRL+I |
Jump to you next location |
If you want to scroll down, you can do so by full screen, or by half screen. The mnemonics are forward and backward for whole screens, and down and up for half screens. To execute these commands, hold the CTRL
key, and hit f
, b
, d
, or u
.
Command | Action |
---|---|
CTRL+F,CTRL+B |
Scroll fw/bw by a whole screen |
CTRL+D,CTRL+U |
Scroll fw/bw by half a screen |
Writing pretty words
So, now you can quit/save, and you can move around, but how do you actually write stuff? Well, the easiest way is to hit i
, for insert. This takes you out of command mode and into edit mode, or insert mode, as it is variously called. At that point you can just type your little heart out, for instance, you can finally write that novel you’ve been yakking up on Tweeter.
Command | Action |
---|---|
i,a |
Insert at/after the cursor |
I,A |
Insert at the beginning/end of a line |
o,O |
Open a new line below/above the cursor |
Deleting some of those words
Not to be downer, but at some point you’re going to mess up some of those words you just typed. Fortunately, there’s a number of creative ways to strike those embarrassments from the digital record.
Command | Action |
---|---|
x,X |
Delete under/before the cursor |
dd |
Delete the whole line |
dnd |
Delete n lines |
d$, D |
Delete from the cursor to the end of the line |
cw |
Delete the rest of a word, and enter edit mode |
cc |
Delete the entire line, and enter edit mode |
r |
Replace a single character, stay in command mode |
s |
Delete a character and enter edit mode |
S |
Delete the rest of the line and enter edit mode |
Cut, Copy and Paste
Okay, this is where things get real. First, enter visual mode by hitting v
, or V
to operate on complete lines. Then manipulate the highlighted region using your movement operations, hjkl
etc. Once you have your region of interest highlighted, either hit d
to cut, or y
to yank, which is Vim for copy. In bulleted format we have:
- Enter visual mode using
v
, orV
for whole lines - Manipulate the shaded region by moving the cursor around
- Cut with
d
, or copy/yank withy
- Move somewhere to paste the cut or copied text
- Use
p
to paste after the cursor; useP
to paste before the cursor
Searching
You can search forward in the text for something in command mode by entering a forward (linux) slash, and then a “pattern” describing what you are looking for, and then hitting enter. You can cycle through the matches in the text by hitting the forward slash again, until you run out of matches. You can search backwards using a question mark, and cycle backwards using the question mark, also. So, what is a “pattern”? Welp, that is definitely something for another post. The short answer is that Vim supports regular expressions and POSIX bracket expressions. Searching will work as expected for regular words.
Command | Action |
---|---|
/word |
Search for `word`, use `n` for the *next* occurrence |
:%s/old/new/g |
Replace all instances of *old* with *new* |
#/* |
Jump to the previous/next item matching the text under the cursor |
Miscellania
These guys don’t fit in anywhere else, really.
Command | Action |
---|---|
u |
Undo, think: CTRL+z |
CTRL+R |
Re-do, or undo your undo |
U |
Restore the whole line |
. |
Repeat the last operation |
:w !diff % - |
Diff between your latest unsaved changes and your last save |