Making simple edits in insert mode
When working with Vim, you usually want to spend as little time as possible in the insert mode (unless you’re writing and not editing). Since most text operations involve editing, we’ll focus on that.
You’ve already learned to enter the insert mode by pressing i. There are more ways to get to the insert mode. Often, you will want to change some piece of text for another one, and there’s a command just for that – c. The change command allows you to remove a portion of text and immediately enter an insert mode. Change is a compound command, meaning that it needs to be followed by a command that tells Vim what needs to be changed. You can combine it with any of the movement commands you’ve learned before. Here are some examples:
Command |
Before |
After |
Cw |
|
|
c3e |
|
|
Cb |
|
|
c4l |
||
cW |
words versus WORDS
Remember, non-alphanumeric characters (including punctuation) are treated as words. For example, prepare_menu_item(ingredient, has_spam)
will be considered six words (but only one WORD): prepare_menu_item
, (
, ingredient
, ,
(comma), has_spam
, and )
.
Exception
As an odd exception, cw behaves like ce. This is a leftover from Vi, Vim’s predecessor.
As you learn more complex movement commands, you can combine these with a change for quick and seamless editing. We’ll also be covering a few plugins that will supercharge a change command to allow for even more powerful editing, such as changing text within braces or replacing the type of quotes on the go.
Just like a sentence
All of these examples follow the <command> <number> <movement or a text object>
structure. You can put a number before or after <command>
.
For example, say you wish to change the following line:
prepare_menu_item(ingredient, with_spam=has_spam)
Say you want to change the ingredient
to '
egg'
:
prepare_menu_item('egg', with_spam=has_spam)
To accomplish that, you can execute the following set of commands:
Contents of the line |
Action |
Start with a cursor at the beginning of the line |
|
Hit |
|
Press |
|
Type |
|
Hit the Esc key to return to NORMAL mode |
Sometimes, we just want to cut things, without putting anything instead, and d does just that. It stands for delete. It behaves similarly to c, except that the behavior of w and e is more standard, as can be seen in the following example:
Command |
Before |
After |
dw |
|
|
d3e |
||
db |
||
d5l |
||
dW |
There are also two more nifty shortcuts that allow you to change or delete a whole line:
Command |
What it does |
cc |
Clears the whole line and enters insert mode. Preserves current indentation level, which is useful when coding. |
dd |
Deletes an entire line. |
For example, look at the following piece:
Figure 1.35 – A piece of code we wrote (or copied) earlier.
By hitting dd you will completely remove a line, as demonstrated in the following example:
Figure 1.36 – dd removes a line and places the cursor on the next line
Hitting cc will clear the line and enter insert mode with the proper indent, as shown in the following example:
Figure 1.37 – cc clears the line, and puts you into insert mode at the beginning of the line.
Visual mode
If you run into difficulties picking the right movement commands, you can also use the visual mode to select the text you want to modify. Hit v to enter the visual mode and use the usual movement commands to adjust the selection. Run the desired command (such as c to change or d to delete) once you’re satisfied with the selection.