六、基本编辑
插入、删除、剪切、复制等构成了基本的文本编辑操作,vi 也以其特殊的方式支持这些操作。
0.撤销-u命令
同时 vi 还支持有限形式的撤销操作,在命令模式下按 U 键(u命令)就可以撤销用户最后一步操作。 这项功能在学习一些编辑命令的时候会很有帮助。
1.添加文本
有几种方式都可以进入 vi 的插入模式。 假设现在已经使用 vi 命令进入 foo.txt 文件,并使用 i 命令进入插入模式,如下图:
vi-添加文本进入foo文件且插入模式.png
注意一开始光标的位置,是在左上角。
(1)行末添加文本的a命令
因为光标不能跳出行末,所以单纯使用 i 命令并不能完成在文本末尾添加内容的任务。 为此 vi 提供了在行末添加文本的 a 命令,当用户将光标移动到行的末尾并使用 a 命令时,光标就会越过文本的末尾,同时 vi 进入插入模式。这样用户就可以在行末添加文本了。 输入结束后别忘了按 Esc 键退出插入模式。
a命令行末添加文本.png
(2)行末添加文本的A命令
因为用户经常用到在行末添加文本的功能,所以 vi 提供了使光标移动到行末并进入插入模式的快捷方式——A命令。
A命令直接到行末添加文本.png
① 示例
接着上面的操作,首先使用 0 命令将光标移动到行的开头。 接下来,通过使用 A 命令,将 Line2 、Line3、Line4、Line5 写入 foo.txt 文件中。
大A命令行末添加文本1.png
按 Esc 键退出插入模式。 可以看到,A 命令使 vi 进入插入模式并自动将光标移动到行尾,既好用又方便(省去了手动将光标移动到行尾)。
2.插入一行
插入文本的另一种方式是在文本中重开1行,即在两行现存的文字中间插入空白行并进入插入模式。 下表列出了插入 1 行的两种方式:
命令 | 开行 |
---|---|
o | 当前行的下方插入(并进入插入模式)。 |
O | 当前行的上方插入(并进入插入模式)。 |
(1)示例
① o-在下面新建一行插入
先将光标置于 Line3,再输入o,结果如下图:
o-下方新建空白行插入.png
就会在 Line3 的下方插入了 1 个空白行。 再次按 Esc 键退出插入模式。 并在命令模式下按 U 键取消上述操作。
② O-在上面新建一行插入
光标置仍于 Line3,再输入O,结果如下图:
O-上方新建空白行插入.png
可以看到,在 Line 3 的上方插入了 1 个空白行,并进入了插入模式。 按 Esc 键退出插入模式。 并在命令模式下按 U 键取消上述操作。
3.删除文本
vi 提供了很多种删除文本的方式,每一种都需要进行一次至两次的按键操作。
- x 命令
- d 命令
(1)x命令
首先,x命令(也就是 X 键)会删除光标处的字符。x 命令可加以数字前缀来明确删除的字符数目。
① x命令
先将光标移至文件首行中的 It 字母的前面,使用 x 命令直到完全删除 It was cool. 这句话。 然后按 U 键直到所有的删除操作都被取消为止。
x命令删除示例.png
x命令示例按U键还原.png
按 U 键还原时会发现,屏幕底部会出现提示信息。
Ⅰ.注意:
实际上,vi 只能取消一次操作,vim 可取消多次操作。
② x命令 数字前缀
仍将光标移至文件首行中的 It 字母的前面,使用 12x 命令删除 It was cool. 这句话。 (12是因为这句话加上空格、点、字母共12个)
(2)d命令
D 键(即d命令)则使用得更加普遍。像x 命令一样,d 命令也可加以数字前缀来明确删除的次数。 另外, d 命令总是加以控制删除范围的光标移动命令作为后缀。
① 示例
Ⅰ.使用 dw 命令来删除整个单词
再次将光标移动到单词 It,使用 dw 命令来删除 It 这整个单词。
dW命令删除整个单词.png
Ⅱ.使用 d$ 删除光标至本行末尾的字符
从 was 到行末所有字符都删除。
d$命令删除从光标到行末内容.png
Ⅲ.使用dG删除当前行到文件末尾的内容
删除当前行(第1行)到文件末尾的内容。
dG命令删除当前行到文件末尾内容.png
使用 u 命令三次来取消以上操作。
(3)其它示例
① 文本删除命令(准)
命令 | 删除内容 |
---|---|
x | 当前字符。 |
3x | 当前字符及之后的2个字符。 |
dd | 当前行。 |
5dd | 当前行及之后4行。 |
dW | 当前字符到下一个单词的起始。(也就是整个单词) |
d$ | 当前字符到当前行的末尾。 |
d0 | 当前字符到当前行的起始。 |
d^ | 当前字符到当前行下一个非空字符。 |
dG | 当前行到文件末尾。 |
d20G | 当前行到文件第20行。 |
4.剪切、复制和粘贴文本(准)
(1)d命令-剪切
d命令不只是删除文本,而是在 剪切 文本。 用户每次使用 d 命令之后,都会复制删除的内容进缓存(类似剪贴板)。
(2)y命令-复制
就像 d 命令剪切文本的形式一样,y 命令会 复制 文本。
① 复制命令范例(准)
下表列出了一些 y 命令与光标移动命令共同作用的范例。
命令 | 复制内容 |
---|---|
yy | 当前行。 |
5yy | 当前行及之后4行。 |
yW | 当前字符到下一个单词的起始。(也就是1整个单词) |
y$ | 当前字符到当前行的末尾。 |
y0 | 当前字符到当前行的起始。(也就是当前字符到本行开头) |
y^ | 当前字符到当前行下一个非空字符。 |
yG | 当前行到文件末尾。 |
y20G | 当前行到文件第20行。 |
(3)p、P命令-粘贴(准)
Ⅰ.p命令-粘贴到光标之后
使用 p 命令就可以将缓存中的内容粘贴到光标之后 .
Ⅱ.P命令-粘贴到光标之前
使用 P 命令就可以将缓存中的内容粘贴到光标之前。
(4)示例练习(准)
以下是通过foo.txt 文件,来练习一下复制和粘贴。
① p命令
将光标移至文本的第 1 行,使用 yy 命令复制当前行。 接下来,将光标移至最后一行(G),使用 p 命令将复制的内容粘贴到当前行的下方。
p命令粘贴到光标之后.png
别忘了 u 命令会取消我们的操作。
② P命令
将光标移至文件的最后 1 行,输入 P 命令将文本粘贴到当前行的上方。
P命令粘贴到光标之前.png
将表 复制命令 中的其它命令都练习一下,以此来实际了解 p 命令和 P 命令的作用。 练习结束后,将文件恢复到本来的样子。
5.合并行(准)
vi 在行的概念上非常严格。 通常来说,将光标移动到行的末端并删除行的末尾字符并不能将此行与下一行合并。 因此,vi 专门提供了 J 命令来合并行(不要与移动光标的 j 命令混淆)。
(1)J命令
将当前行与下一行合并。
① 示例
将光标置于第 3 行并输入 J 命令,将得以下结果:
J命令合并行.png