Book HomeLearning the vi EditorSearch this book

2.4. More Ways to Insert Text

You have inserted text before the cursor with the sequence:

itext to be insertedESC

You've also inserted text after the cursor with the a command. There are other insert commands for inserting text at different positions relative to the cursor:

A
Append text to end of current line.

I
Insert text at beginning of line.

o
Open blank line below cursor for text.

O
Open blank line above cursor for text.

s
Delete character at cursor and substitute text.

S
Delete line and substitute text.

R
Overstrike existing characters with new characters.

All of these commands place you in insert mode. After inserting text, remember to press ESC to escape back to command mode.

A (append) and I (insert) save you from having to move your cursor to the end or beginning of the line before invoking insert mode. (The A command saves one keystroke over $a. Although one keystroke might not seem like much of a saving, the more adept—and impatient—an editor you become, the more keystrokes you will want to omit.)

o and O (open) save you from having to insert a carriage return. You can type these commands from anywhere within the line.

s and S (substitute) allow you to delete a character or a whole line and replace the deletion with any amount of new text. s is the equivalent of the two-stroke command c SPACE and S is the same as cc. One of the best uses for s is to change one character to several characters.

R ("large" replace) is useful when you want to start changing text, but you don't know exactly how much. For example, instead of guessing whether to say 3cw or 4cw, just type R and then enter your replacement text.

2.4.1. Numeric Arguments for Insert Commands

Except for o and O, the above insert commands (plus i and a) take numeric prefixes. With numeric prefixes, you might use the commands i, I, a, and A to insert a row of underlines or alternating characters. For example, typing 50i*ESC inserts 50 asterisks, and typing 25a*- ESC appends 50 characters (25 pairs of asterisk and hyphen). It's better to repeat only a small string of characters.[9]

[9]Very old versions of vi have difficulty repeating the insertion of more than one line's worth of text.

With a numeric prefix, r replaces that many characters with a repeated instance of a single character. For example, in C or C++ code, to change || to &&, you would place the cursor on the first pipe character, and type 2r&.

You can use a numeric prefix with S to substitute several lines. It's quicker and more flexible, though, to use c with a movement command.

A good case for using the s command with a numeric prefix is when you want to change a few characters in the middle of a word. Typing r wouldn't be correct, but typing cw would change too much text. Using s with a numeric prefix is usually the same as typing R.

There are other combinations of commands that work naturally together. For example, ea is useful for appending new text to the end of a word. It helps to train yourself to recognize such frequent combinations so that they become automatic.



Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.