免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: projl

《Learning the vi editor》 [复制链接]

论坛徽章:
0
发表于 2008-06-11 13:21 |显示全部楼层
C replaces characters from the current cursor position to the end
of the line. It has the same effect as combining c with the special
end-of-line indicator $ (c$).

The commands cc and C are really shortcuts for other commands,
so they don't follow the general form of vi commands. You'll see
other shortcuts when we discuss the delete and yank commands.

2.3.3.3 Characters
One other replacement edit is given by the r command. r
replaces a single character with another single character. You do
not have to press ESC to return to command mode after making the
edit. There is a misspelling in the line below:


Only one letter needs to be corrected. You don't want to use cw in
this instance because you would have to retype the entire word. Use
r to replace a single character at the cursor:

Keystrokes

Results

rW


Give the replace command r, followed by the replacement character W.

2.3.3.4 Substituting text
Suppose you want to change just a few characters, and not a
whole word. The substitute command (s), by itself, replaces a single
character. With a preceding count, you can replace that many
characters. As with the change command (c), the last character of
the text will be marked with a $ so that you can see how much text
will be changed.


The S command, as is usually the case with uppercase
commands, lets you change whole lines. In contrast to the C
command, which changes the rest of the line from the current
cursor position, the S command deletes the entire line, no matter
where the cursor is. vi puts you in insert mode at the beginning of
the line. A preceding count replaces that many lines.

论坛徽章:
0
发表于 2008-06-11 13:22 |显示全部楼层
Both s and S put you in insert mode; when you are finished
entering new text, press ESC.


The R command, like its lowercase counterpart, replaces text.
The difference is that it simply enters overstrike mode. The
characters you type replace what's on the screen, character by
character, until you type ESC. You can only overstrike a maximum
of one line; as you type RETURN, vi will open a new line, effectively
putting you into insert mode.

2.3.4 Changing Case
Changing the case of a letter is a special form of replacement.
The tilde (~) command will change a lowercase letter to uppercase,
or an uppercase letter to lowercase. Position the cursor on the letter
whose case you want to change, and type a ~. The case of the letter
will change, and the cursor will move to the next character.

In older versions of vi, you cannot specify a numeric prefix or text
object for the ~ to affect. Modern versions do allow a numeric
prefix.

If you want to change the case of more than one line at a time, you
must filter the text through a UNIX command like tr, as described
in Chapter 7.

2.3.5 Deleting Text
You can also delete any text in your file with the delete
command d. Like the change command, the delete command
requires a text object (the amount of text to be operated on). You
can delete by word (dw), by line (dd and D), or by other movement
commands that you will learn later.

With all deletions, you move to where you want the edit to take
place, then give the delete command (d) and the text object, such
as w for word.

2.3.5.1 Words
Suppose you have the following text in the file:

论坛徽章:
0
发表于 2008-06-11 13:22 |显示全部楼层
with the cursor positioned as shown. You want to delete one are in
the first line.

Keystrokes Results
2w
Move the cursor to where you want the edit to begin (are).
dw
Give the delete word command (dw) to delete the word are.

dw deletes a word beginning where the cursor is positioned. Notice
that the space following the word is deleted.

dw can also be used to delete a portion of a word. In this example:


you want to delete the ed from the end of allowed.

Keystrokes

Results


dw
Give the delete word command (dw) to delete the word, beginning with
the position of the cursor.

dw always deletes the space before the next word on a line, but we
don't want to do that in the previous example. To retain the space
between words, use de, which will delete only to the end of a word.
Typing dE will delete to the end of a word, including punctuation.

You can also delete backward (db) or to the end or beginning of a
line (d$ or d0).

2.3.5.2 Lines

论坛徽章:
0
发表于 2008-06-11 13:23 |显示全部楼层
The dd command deletes the entire line that the cursor is
on. dd will not delete part of a line. Like its complement cc, dd is a
special command. Using the same text as in the previous example,
with the cursor positioned on the first line as shown below:


you can delete the first two lines:

Keystrokes Results


2dd

Give the command to delete two lines (2dd). Note that even though the
cursor was not positioned on the beginning of the line, the entire line is
deleted.

If you are using a "dumb" terminal[2] (or a very slow one), line
deletions look different. The dumb terminal will not redraw the
screen until you scroll past the bottom of the screen. On a dumb
terminal the deletion looks like this:

[2] Dumb terminals are rather rare these days. Most of the time, you will run vi inside a terminal emulator on
a bitmapped screen.
Keystrokes Results

2dd


Give the command to delete two lines (2dd). An @ symbol "holds the
place" of the deleted line, until vi redraws the entire screen.


The D command deletes from the cursor position to the end of
the line. (D is a shortcut for d$.) For example, with the cursor
positioned as shown:


you can delete the portion of the line to the right of the cursor.

Keystrokes Results

论坛徽章:
0
发表于 2008-06-11 13:24 |显示全部楼层
D
Give the command to delete the portion of the line to the right of the
cursor (D).
2.3.5.3 Characters
Often you want to delete only one or two characters. Just as r is
a special change command to replace a single character, x is a
special delete command to delete a single character. x deletes only
the character the cursor is on. In the line below:

zYou can move text by deleting text and then

[3]
you can delete the letter z by pressing x. A capital X deletes the
character before the cursor. Prefix either of these commands with a
number to delete that number of characters. For example, 5x will
delete the five characters under and to the right of the cursor.

[3] The mnemonic for x is that it is supposedly like "x-ing out" mistakes with a typewriter. Of course, who
uses a typewriter any more?
2.3.5.4 Problems with deletions

论坛徽章:
0
发表于 2008-06-11 13:36 |显示全部楼层
This works only for a deleted line. Words, or a portion of a
line, are not saved in a buffer. If you want to restore a
deleted word or line fragment, and u won't work, use the pcommand by itself. This restores whatever you've last
deleted. The next few subsections will talk more about the
commands u and p.

2.3.6 Moving Text
In vi, you move text by deleting it and then placing that deleted
text elsewhere in the file, like a "cut and paste." Each time you
delete a text block, that deletion is temporarily saved in a special
buffer. Move to another position in your file and use the put
command (p) to place that text in the new position. You can move
any block of text, although moving is more useful with lines than
with words.


The put command (p) puts the text that is in the buffer after the
cursor position. The uppercase version of the command, P, puts the
text before the cursor. If you delete one or more lines, p puts the
deleted text on a new line(s) below the cursor. If you delete less
than an entire line, p puts the deleted text on the current line, after
the cursor.

Suppose in your file practice you have the text:


and want to move the second line, like a "cut and paste", below the
third line. Using delete, you can make this edit.

Keystrokes Results
dd
With the cursor on the second line, delete that line. The text is placed
in a buffer (reserved memory).
p

论坛徽章:
0
发表于 2008-06-11 13:37 |显示全部楼层
Give the put command, p, to restore the deleted line at the next line
below the cursor. To finish reordering this sentence, you would also
have to change the capitalization and punctuation (with r) to match the
new structure.
Once you delete text, you must restore it before the
next change command or delete command. If you
make another edit that affects the buffer, your
deleted text will be lost. You can repeat the put
over and over, so long as you don't make a new
edit. In Chapter 4, you will learn how to save text
you delete in a named buffer so you can retrieve it
later.

2.3.6.1 Transposing two letters
You can use xp (delete character and put after cursor) to transpose
two letters. For example, in the word mvoe, the letters vo are
transposed (reversed). To correct a transposition, place the cursor
on v and press x, then p. By coincidence, the word transpose helps
you remember the sequence xp; x stands for trans, and p stands for
pose.

There is no command to transpose words. The section "More
Examples of Mapping Keys" in Chapter 7 discusses a short sequence
of commands that transposes two words.

2.3.7 Copying Text
Often you can save editing time (and keystrokes) by copying a
part of your file to use in other places. With the two commands y(for yank) and p (for put), you can copy any amount of text and put
that copied text in another place in the file. A yank command copies
the selected text into a special buffer, where it is held until another
yank (or deletion) occurs. You can then place this copy elsewhere in
the file with the put command.

As with change and delete, the yank command can be combined
with any movement command (yw, y$, 4yy). Yank is most
frequently used with a line (or more) of text, because to yank and
put a word usually takes longer than simply to insert the word.

The shortcut yy operates on an entire line, just as dd and cc do. But
the shortcut Y, for some reason, does not operate the way D and C

论坛徽章:
0
发表于 2008-06-11 13:37 |显示全部楼层
do. Instead of yanking from the current position to the end of the
line, Y yanks the whole line. Y does the same thing as yy.

Suppose you have in your file practice the text:


You want to make three complete sentences, beginning each with
With a screen editor you can. Instead of moving through the file,
making this edit over and over, you can use a yank and put to copy
the text to be added.

Keystrokes Results
yy
Yank the line of text that you want to copy into the buffer. The cursor
can be anywhere on the line you want to yank (or on the first line of a
series of lines).
2j
Move the cursor to where you want to put the yanked text.
P
Put the yanked text above the cursor line with P.
jp
Move the cursor down a line and put the yanked text below the cursor
line with p.

Yanking uses the same buffer as deleting. Each new deletion or
yank replaces the previous contents of the yank buffer. As we'll see
in Chapter 4, up to nine previous yanks or deletions can be recalled
with put commands. You can also yank or delete directly into up to

论坛徽章:
0
发表于 2008-06-11 13:38 |显示全部楼层
26 named buffers, which allows you to juggle multiple text blocks at
once.

2.3.8 Repeating or Undoing Your Last Command
Each edit command that you give is stored in a temporary buffer
until you give the next command. For example, if you insert the
after a word in your file, the command used to insert the text, along
with the text that you entered, is temporarily saved.

2.3.8.1 Repeat
Any time you make the same editing command over and over,
you can save time by duplicating it with the repeat command, the
period (.). Position the cursor where you want to repeat the editing
command, and type a period.

Suppose you have the following lines in your file:


You can delete one line, and then, to delete another line, simply
type a period.

Keystrokes Results
dd
Delete a line with the command dd.
.
Repeat the deletion.

Older versions of vi had problems repeating commands. For
example, such versions may have difficulty repeating a long
insertion when wrapmargin is set. If you have such a version, this
bug will probably bite you sooner or later. There's not a lot you can
do about it after the fact, but it helps to be forewarned. (Modern
versions do not seem to have this problem.) There are two ways
you can guard against a potential problem when repeating long
insertions. You can write your file (:w) before repeating the

论坛徽章:
0
发表于 2008-06-11 13:39 |显示全部楼层
insertion (returning to this copy if the insertion doesn't work
correctly). You can also turn off wrapmargin like this:

:set wm=0

In Section 7.3.5, we'll show you an easy way to ause the
wrapmargin solution. In some versions of vi, the command CTRL-@
repeats the most recent insertion. CTRL-@ is typed in insert mode
and returns you to command mode.

2.3.8.2 Undo
As mentioned earlier, you can undo your last command if you
make an error. Simply press u. The cursor need not be on the line
where the original edit was made.

To continue the example above, showing deletion of lines in the file
practice:

Keystrokes

Results

u


u undoes the last command and restores the deleted line.

U, the uppercase version of u, undoes all edits on a single line, as
long as the cursor remains on that line. Once you move off a line,
you can no longer use U.

Note that you can undo your last undo with u, toggling between two
versions of text. u will also undo U, and U will undo any changes to a
line, including those made with u. (A tip: the fact that u can undo
itself leads to a nifty way to get around in a file. If you ever want to
get back to the site of your last edit, simply undo it. You will pop
back to the appropriate line. When you undo the undo, you'll stay
on that line.)

2.4 More Ways to Insert Text
You have inserted text before the cursor with the sequence:

itext to be insertedESC
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP