Learning the vi Editor

Learning the vi EditorSearch this book
Previous: 2.3 Simple Edits Chapter 2
Simple Editing
Next: 2.5 Joining Two Lines with J
 

2.4 More Ways to Insert Text

You have inserted text before the cursor with the sequence:

itext to be inserted[ESC]

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.[4]

[4] 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.


Previous: 2.3 Simple Edits Learning the vi EditorNext: 2.5 Joining Two Lines with J
2.3 Simple Edits Book Index2.5 Joining Two Lines with J

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System