Vi编辑器:高效文本编辑指南
1. 行与逻辑行的概念
在Vi编辑器中,屏幕上显示的物理行通常限制为80个字符。而逻辑行是指两次回车之间输入的所有文本。例如,在按下回车键之前输入了200个字符,Vi会将这200个字符视为一行,即便在屏幕上它们看起来像几行物理行。
有两个在行移动中非常有用的命令:
-
0
(零):移动到行首。
-
$
:移动到行尾。
若要在屏幕上显示行号,可输入
:set nu
。以下是一个示例文件,展示了行号的显示:
1 With the screen editor you can scroll the page,
2 move the cursor, delete lines, and insert characters,
3 Screen editors are very popular.
while seeing the results of edits as you make them.
这里逻辑行有3个,但屏幕上显示的物理行有4个。若光标位于
delete
一词的
d
上,输入
$
,光标会移动到
them
一词后面的句号处;若输入
0
,光标会移回到行首
the
一词的
t
处。
如果不使用Vi中的自动换行选项(
: set wm=10
),则必须使用回车键来换行,以保持每行长度易于管理。
2. 按文本块移动光标
除了按行移动,还可以按文本块(单词、句子或段落)来移动光标。
-
w
命令:每次将光标向前移动一个单词,将符号和标点视为单词。例如,连续输入10次
w
命令,光标会按如下方式移动:
move the cursor,
delete lines,
and insert characters,
-
W命令(大写):每次向前移动一个单词,忽略符号和标点,使光标移动到空格后的第一个字符。示例如下:
move the cursor,
delete lines, and insert characters,
-
b命令:每次将光标向后移动一个单词。 -
B命令:每次向后移动一个单词,忽略标点。
这些命令都可以与数字结合使用,以实现多次移动。例如,
2w
向前移动两个单词,
5B
向后移动五个单词(忽略标点)。
3. 基本编辑命令概述
在文件中输入文本时,很少能一次就达到完美,通常需要进行编辑。编辑主要包括插入、删除、更改、移动和复制文本等操作。Vi中有四个基本编辑命令:
-
i
:插入。
-
c
:更改。
-
d
:删除。
-
d
然后
p
:移动(删除并放置)。
-
y
:复制(yank)。
以下是基本编辑命令的简单示例表格:
| 对象 | 更改 | 删除 | 复制(Yank) |
| ---- | ---- | ---- | ---- |
| 一个单词 |
cw
|
dw
|
yw
|
| 两个单词 |
2cw
|
2dW
|
2YW
|
| 向后三个单词 |
3cb
|
3db
|
3Yb
|
| 一行 |
cc
|
dd
|
YY
或
Y
|
| 到行首 |
c0
|
d0
|
Y0
|
| 单个字符 |
r
|
x
|
Yl
|
| 到行尾 |
c$
或
C
|
d$
或
D
|
y$
|
4. 插入新文本
在创建新文件或编辑现有文本时,都可以使用插入命令
i
来添加字符、单词和句子。例如,要在句子开头插入
Today,
,可按以下步骤操作:
I'll start putting
together a written
plan that shows
different strategies
iToday, <ESC>
在智能终端上,插入新文本时,现有文本会向右移动;而在“哑终端”(如
adm3a
)上,输入时会覆盖现有文本,按下
ESC
后,行会立即调整,使缺失的字符重新出现。
5. 更改文本
5.1 更改单词
使用
cw
命令可以用更长、更短或任意数量的文本替换一个单词。例如,将
designing
更改为
putting together
:
I'll start
designing a
cw
designin$ a
putting
together <ESC>
putting together a
cw
命令也适用于单词的一部分。例如,将
putting
改为
puts
,可将光标置于第二个
t
上,输入
cw
,然后输入
s
并按
ESC
。还可以使用数字前缀来一次性更改多个单词或字符,如
3cw
更改光标右侧的三个单词,
5cl
更改光标右侧的五个字母。
5.2 更改行
cc
命令用于替换当前整行,无论光标位于该行的何处,都会用输入的文本替换整行。
C
命令则从当前光标位置替换到行尾,与
c$
效果相同。
5.3 更改字符
r
命令用于将单个字符替换为另一个字符,常用于纠正拼写错误。例如,将
Yasterday
中的
a
替换为
e
:
Yasterday, I received
re
Yesterday, I received
使用
r
命令后,无需按
ESC
即可完成编辑,会自动返回命令模式。
6. 删除文本
6.1 删除单词
dw
命令从光标位置删除到单词末尾,也可用于删除单词的一部分。例如,删除
Today, I'll start start putting together
中的一个
start
:
Today, I'll start
start putting together
dw
Today, I'll -
start putting together
若要保留单词间的空格,可使用
de
命令。还可以使用
db
向后删除单词,
d$
或
d0
删除到行尾或行首。
6.2 删除行
dd
命令删除当前整行。例如,删除示例文件中的前两行:
Today, I'll start
putting together a
written plan
that shows different
2dd
written plan
that shows different
在“哑终端”或波特率低于1200的终端上,行删除的显示不同,删除的行位置会用
@
符号占位,直到屏幕重新绘制。
D
命令从光标位置删除到行尾,且不能使用数字前缀。
6.3 删除字符
x
命令删除光标所在的字符,
X
命令删除光标前的字符。可以在命令前加数字来删除指定数量的字符,如
5X
删除光标左侧的五个字符。
graph LR
A[开始编辑] --> B{选择操作}
B --> |插入| C[使用i命令插入文本]
B --> |更改| D{选择更改对象}
D --> |单词| E[使用cw等命令更改单词]
D --> |行| F[使用cc或C命令更改行]
D --> |字符| G[使用r命令更改字符]
B --> |删除| H{选择删除对象}
H --> |单词| I[使用dw等命令删除单词]
H --> |行| J[使用dd或D命令删除行]
H --> |字符| K[使用x或X命令删除字符]
B --> |移动| L[使用d和p命令移动文本]
B --> |复制| M[使用y和p命令复制文本]
通过以上操作,你可以在Vi编辑器中高效地进行文本编辑。在实际使用中,建议多进行练习,熟练掌握这些命令,以提高编辑效率。
7. 移动文本
移动文本就像“剪切和粘贴”操作,通过删除文本并将其放置到文件的其他位置。每次删除一个文本块时,该删除内容会临时保存在一个缓冲区中。可以移动到文件的另一个位置,使用
put
命令将文本放置到新位置。这个命令序列对行的操作比对单词更有用。
-
p
命令:将保存或删除的文本(在缓冲区中)放置在光标位置之后。
-
P
命令(大写):将文本放置在光标之前。
如果删除一行或多行,
p
会将删除的文本放置在光标下方的新行;如果删除一个单词,
p
会将删除的文本放置在光标所在行的后面。
例如,要移动文件中的第四行文本,先删除该行:
Today, I'll start
putting together a
plan for documenting
the Alcuin product
that shows
dd
Today, I'll start
putting together a
plan for documenting
that shows
然后使用
p
将删除的行恢复到光标下方的下一行:
Today,
I'll start
putting together a
plan for documenting
that shows
p
Today,
I'll start
putting together a
plan for documenting
that shows
the Alcuin product
还可以使用
xp
(删除字符并放置在光标之后)来交换两个字母。例如,在单词
mvoe
中,将光标置于
v
上,按下
x
然后
p
,可将字母
vo
交换。
需要注意的是,删除文本后,必须在进行下一个更改或删除命令之前恢复它。如果进行了影响缓冲区的其他编辑,删除的文本将丢失。只要不进行新的编辑,就可以反复使用
put
命令。
8. 复制文本
使用
y
(yank)和
p
(put)命令可以复制文件中的部分文本并将其放置到其他位置。
yank
命令用于将文本的副本保存到缓冲区,而不改变原始文本,然后使用
put
命令将副本放置到文件的其他位置。
yank
可以与任何移动命令结合使用,如
yw
、
y$
或
4yy
。
yank
最常用于一行或多行文本,因为复制和粘贴一个单词通常比直接插入该单词花费的时间更长。
例如,要复制五行文本:
on the Alcuin product.
Yesterday, I received
the product demo
and other materials
that you sent me.
5YY
on the Alcuin product.
Yesterday, I received
the product demo
and other materials
that you sent me.
要放置复制的文本,将光标移动到想要放置的位置,使用
p
命令将其插入到当前行下方,或使用
P
命令将其插入到当前行上方。
that you sent me.
P
that you sent me.
on the Alcuin product.
Yesterday, I received
the product demo
and other materials
that you sent me.
删除和复制使用相同的缓冲区,每次新的删除或复制操作都会替换缓冲区中的先前内容。后续可以使用
put
命令最多召回九次之前的复制或删除操作。
9. 使用上一个命令
每个输入的命令都会临时保存在一个缓冲区中,直到输入下一个命令。如果多次执行相同的编辑命令,可以使用
.
(点)来重复上一个命令,从而节省时间。要重复命令,将光标置于屏幕上的任意位置,按下
.
即可重复上一个命令(如插入或删除)。还可以使用数字参数,如
2.
来多次重复上一个命令。
例如,要删除文件中的某一行:
Yesterday, I received
the product demo.
other materials
dd
Yesterday, I received
the product demo.
.
Yesterday, I received
在某些版本的 Vi 中,
CTRL - @
(
"e
)命令重复上一个插入或追加命令,而
.
命令重复上一个更改文本的命令,包括删除或更改命令。
如果操作出错,可以撤销上一个命令。将光标置于屏幕上的任意位置,按下
u
即可撤销上一个命令(如插入或删除)。
U
命令(大写)可以撤销一行上的所有编辑,但前提是光标必须保持在该行上,一旦离开该行,就不能再使用
U
命令。
the product demo.
U
Yesterday, I received
the product demo.
other materials
总结
Vi 编辑器提供了丰富的文本编辑功能,通过各种命令可以高效地进行文本的插入、更改、删除、移动和复制操作。以下是对这些操作的总结表格:
| 操作类型 | 命令 | 说明 |
| ---- | ---- | ---- |
| 插入 |
i
| 在光标前插入文本 |
| 更改 |
cw
、
cc
、
C
、
r
| 分别用于更改单词、整行、从光标到行尾、单个字符 |
| 删除 |
dw
、
dd
、
D
、
x
、
X
| 分别用于删除单词、整行、从光标到行尾、光标所在字符、光标前字符 |
| 移动 |
d
然后
p
| 删除并放置文本到新位置 |
| 复制 |
y
然后
p
| 复制文本到新位置 |
| 重复命令 |
.
| 重复上一个命令 |
| 撤销命令 |
u
、
U
| 分别撤销上一个命令、一行上的所有编辑 |
graph LR
A[文本编辑操作] --> B[插入]
A --> C[更改]
A --> D[删除]
A --> E[移动]
A --> F[复制]
A --> G[重复命令]
A --> H[撤销命令]
B --> B1[i命令]
C --> C1[cw命令]
C --> C2[cc命令]
C --> C3[C命令]
C --> C4[r命令]
D --> D1[dw命令]
D --> D2[dd命令]
D --> D3[D命令]
D --> D4[x命令]
D --> D5[X命令]
E --> E1[d和p命令]
F --> F1[y和p命令]
G --> G1[.命令]
H --> H1[u命令]
H --> H2[U命令]
通过不断练习和熟练掌握这些命令,你可以在 Vi 编辑器中更加高效地完成各种文本编辑任务,提高工作效率。希望这些内容对你在使用 Vi 编辑器时有所帮助。
超级会员免费看
33

被折叠的 条评论
为什么被折叠?



