Vim is the editor of choice for many developers and power users. It’s a text editor based on the old vi editor written by Bill Joy in the 1970s for a version of UNIX. It inherits the key bindings of vi, but also adds a great deal of functionality and extensibility that are missing from the original vi.
Even though Vim isn’t as easy to use initially as standard GUI text editors like Gedit or word processors like OpenOffice.org’s Writer, over a longer term you can become more productive using Vim. If you’re a touch-typist, you’ll find that your speed will improve even more with Vim because your hands rarely need to leave the “home” keys–and you’ll only need to use the mouse if you choose to do so.
If you’re a programmer or working with structured markup languages like HTML, LaTeX, DocBook, etc., Vim is the bee’s knees. It offers a number of features that I’ll cover in later installments that make working with programming and markup languages much easier.
Some people disagree on how many modes Vim actually has. I’m going to define three: insert mode, command mode, and last-line mode. Let’s start with the default mode you’ll see when you start up Vim–command mode.
When you run vim filename to edit a file, Vim starts out in command mode. This means that all the alphanumeric keys are bound to commands, rather than inserting those characters. Typing j won’t insert the character “j”–it will move the cursor down one line. Typing dd will delete an entire line, rather than inserting “dd.”
To enter the insert mode, type i (for “insert”) and now the keys will behave as you’d expect. You can type normally until you want to make a correction, save the file, or perform another operation that’s reserved for command mode or last-line mode. To get out of insert mode, hit the Escape key.
Once you press Escape, you’re in command mode again. What if you’d like to save your file or search through your document? No problem, press : and Vim will switch to last-line mode. Vim is now waiting for you to enter a command like :w to write the file or :q to exit the editor.
Movement in Vim
The first thing you’ll want to learn is how to move around a file. When you’re in command mode, you’ll want to remember the following keys and what they do:
h moves the cursor one character to the left. j moves the cursor down one line. k moves the cursor up one line. l moves the cursor one character to the right. 0 moves the cursor to the beginning of the line. $ moves the cursor to the end of the line. w move forward one word. b move backward one word. G move to the end of the file. gg move to the beginning of the file. `. move to the last edit.
Now that you know how to move around a bit, let’s try editing. Move the cursor to the beginning of a word. Now type x. What happened? You should have deleted the character that the cursor was on. Want to undo it? No problem. Type u (for undo) and it will be restored.
Want to delete an entire word? Move your cursor to the beginning of a word again. Use dw. Note that this will only delete the word from the cursor on–so if you have the cursor in the middle of a word, it will only delete from that point on. Again, u will undo it. Note that Vim has multiple levels of undo, so you can undo the change before that and the change before that, etc.
Want to undo your undo? Hit Ctrl-r. That will redo your last undo.
Again, here’s a longer list of the commands you’ll definitely want to know starting out:
d starts the delete operation. dw will delete a word. d0 will delete to the beginning of a line. d$ will delete to the end of a line. dgg will delete to the beginning of the file. dG will delete to the end of the file. u will undo the last operation. Ctrl-r will redo the last undo.
Now that you know how to enter text, make some changes and so forth, it’s time to learn how to use search and replace in Vim. It’s really pretty easy. If you want to search through the document from command mode, use / followed by the text you want to search for. So, if I want to search for “bunny” I can enter / and then bunny and hit enter.
If I want to find it again, I hit n. If I want to look for a previous instance of the text, I’ll use N instead, which will search the opposite direction through the document.
Want to reverse the direction of your search? Use ? instead of / and Vim will move backwards through the document. Using n and N as above will reverse the direction of the search.
/text search for text in the document, going forward. n move the cursor to the next instance of the text from the last search. This will wrap to the beginning of the document. N move the cursor to the previous instance of the text from the last search. ?text search for text in the document, going backwards. :%s/text/replacement text/g search through the entire document for text and replace it with replacement text. :%s/text/replacement text/gc search through the entire document and confirm before replacing text.
Copy and Paste
You’ve already learned to delete text. The last text that you’ve deleted is stored in the buffer ready to be pasted back into the document. So if you’ve run dd and deleted an entire line, you can now hit p or P to paste it back into the document. This goes for single lines, multiple lines, and even entire documents.
Want to select text? In command mode, hit V and you’ll be able to move the cursor using the arrow keys or the standard movement keys (h, k, j, l) to highlight text. This is pretty easy, but can be slow. Want to copy entire lines at a time? Use V instead of v and you’ll highlight entire lines at a time. Again, you can use the movement keys to highlight additional lines.
Vim has a really cool trick as well. You can highlight in columns. Use Ctrl-v and you’ll be able to highlight a column instead of an entire line. This can be useful when working with some text files that have data in columns and you want to select an entire column, but not an entire line.
When you’ve highlighted what you want, hit y and it will “yank” the text into the buffer to be pasted later. So a usual paste operation might look like this:
Hit v to highlight some text. Then hit y to yank it into the buffer. Then move the cursor where you want it, and use p in command mode. There you go–you’ve just pasted some text!
The commands you most need to start out:
v highlight one character at a time. V highlight one line at a time. Ctrl-v highlight by columns. p paste text after the current line. P paste text on the current line. y yank text into the copy buffer.
Save and Quit
If you’re in insert mode, hit Escape. Then enter : and you’ll see a line at the bottom of the screen with a cursor ready to take input.
To write the file you’re editing, enter w. (So, you’ll have :w.) That will write the file to the existing filename. If you don’t have a filename or want to write out to a different filename, use :w filename.
To quit Vim after you’ve finished, hit :q. Since Vim is your friend, it won’t just pop out on you if you haven’t saved your file. It will say “no write since last change,” and suggest that you add ! to override.
If you really want to quit, go ahead and use :q! to leave without being nagged.You can also exit Vim using ZZ, which will save and quit the file. Again, all this might sound a bit complex, but it really isn’t. It’s a bunch of smaller things to learn that when you add them all up, make for a very powerful package.
For now that should be enough to get you started. Don’t fret, though. We’ll go through more Vim usage next week, and keep working on Vim until you’re an expert.