【Linux基础】VI 编辑器基本使用方法
vi编辑器是所有Unix及Linux系统下标准的编辑器。对Unix及Linux系统的任何版本,vi编辑器是完全相同的,它是Linux中最基本的文本编辑器。
第一章vi的三种模式
第二章vi文本编辑器
第三章vi编辑命令
(一) 移动光标
(二) 简单编辑
(三) 插入文本的常用方法
(四) 使用J合并两行
(五) 回顾基本的vi命令
学习vi的唯一方法是实践。
第一章vi的三种模式
基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:
1、命令行模式command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
输入vi filename后,默认进入命令模式,输入a、i、o均可改变当前模式为插入模式
2、插入模式(Insert mode)
只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
3、底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。
第二章 vi文本编辑器
1、保存和退出文件 (命令模式)
(1) ZZ
输入ZZ 退出并保存编辑的命令。
(2) :wq + Enter(:wq命令等价于ZZ命令)
也可以使用ex命令来保存编辑操作。
输入:w 将保存文件但并不退出vi。
输入:q 没有进行任何编辑操作退出vi。
输入:q!不保存修改强制退出vi。
输入 :wq 则保存编辑器操作并退出vi。
2、不保存编辑而直接退出 (命令模式)
(1) :e! + Enter
输入 :e! 回到此次编辑前状态,重新编辑。
(2) :q! + Enter
输入:q! 放弃此次编辑,并不保存强制退出。
vi通常不允许用户放弃他所做的编辑操作。将感叹号加在 :e 或 :q 命令后面可使vi忽略这个限制,即使已经修改了缓冲区,vi也会执行该操作。
3、保存文件时所遇到的问题
(1) :w!(等价于 :saveas file命令)
输入 :w! file 将覆盖现有的文件;
输入 :w newfile,将把编辑后的版本保存到新文件中。
(2) :!rm junkfile
输入类似于:!df,可以调用外部命令(:!df ,调用用于检查磁盘剩余空间的df命令)。
(3) :sh
输入 :sh,创建一个临时的UNIX shell来调用其他的UNIX命令。
输入 CTRL-D 或 exit 将终止shell执行并返回vi编辑环境
(4)CTRL+Z和fg
(在大部分UNIX系统上,使用作业控制shell时,可以通过简单地输入 CTRL-Z 来挂起vi,并返回到UNIX命令提示符下;输入 fg 即可返回到vi)。
第三章vi编辑命令
1、移动光标
(1) 单一移动 h、j、k、l
在右手指下的 h 、j 、k 和 l 键可以用来移动光标。
h 左移,一个空格
j 下移,一行
k 上移,一行
l 右移,一个空格
注意 :也可以使用光标箭头键、+ 和 - 来上移和下移,或 RETURN 键和 BACKSPACE 键来移动光标,但它们都不是通用的方法,并且并不是所有的终端都支持箭头键。起初,使用字母键代替箭头键来移动光标可能会比较麻烦,但是进过一段时间的使用之后,你会发现这是vi的一个优点,因为不用让手指离开键盘中心就可以四处移动光标。
(2) 数字参数 4l
可以在移动命令的前面添加数字。例如,命令“4l”将光标向右移动4格,就像键入了4次l一样(llll)。
注意: 复合命令的作用是,对于我们所学的每个命令,可以有更多的选择和更强的功能。
(3) 行内移动 0、$
vi有两个实用的行内移动命令:
0 移动到行首
$ 移动到行尾
(4) 按文本块移动 w、W、b、B
我们也可以按单词、句子、段落等等之类的文本块移动光标。
w 命令每次把光标向前移动一个单词,并把符号和标点作为单词处理。
W 命令也可以按单词移动光标,但此时并不把符合和标点作为单词计算。
b 命令可以按单词后移光标,作用与 w 命令相反。
B 命令可以按单词后移光标,作用与 W 命令相反。
(5)屏幕移动ctrl+u、d、f、b和H、M、L
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
(6)其它移动命令
1G或gg:光标移动到文章开头
G:移动到文章末尾
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
(7)搜索命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
(8)替换命令
:s/p1/p2/g 将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g 将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g 将文件中所有p1均用p2替换
2、简单编辑
i 插入命令
a 追加命令
c 修改命令
d 删除命令
y 复制命令
p 粘贴命令
先d后p 移动命令
(1) 插入新文本 i
输入 i 光标当前开始插入
(2) 追加文本 a
输入a 光标后开始插入
(3) 修改文本 c
cw 到单词的尾部
c2b 后退两个单词
c$ 到行尾
c0 到行首
注意: 类似于 i 和 a,c 命令也使你留在插入模式中,直到按下ESC键才会回到命令模式。
[1] 单词cw
输入cw 删除一个单词并且开始进行编辑操作。
[2] 行cc、C
输入cc 删除当前整行并且开始进行编辑操作。
输入C 删除从当前光标位置到行尾的所有字符,并开始编辑操作。(等价于 c$ 命令)
[3] 字符r
输入r利用一个单个字符替换另一个单个字符,替换完毕后直接返回命令模式。
(4) 替换文本 s、S
s 只替换单个字符。替换多个字符,可使用数字前缀。
S 删除整行并开始编辑(等同于cc)。替换多行,可使用数字前缀。
s 和 S 都会使你处于插入模式,当完成新文本的输入时,即可按下ESC键退出插入状态。
R 输入的字符将逐个地替换屏幕上的文本,直到输入ESC键为止。最多只能改写一整行;当输入RETURN时,vi就会打开一个新行,并使你处于插入模式。
(5) 大小写转换 ~
输入~ 可以改变字母的大小写,并移动光标到下一个字符。现在的版本允许使用数字前缀。
输入guw 单词改为小写
输入gUw 单词改为大写
输入guu 当前行改为小写
输入gUU 当前行改为大写
(6) 删除文本 d
d 使用d命令删除文件中的冗余文本。类似于修改命令,删除命令也需要文本目标(将被删除的文本数量)。可以按单词(dw)、按行(dd 和 D)或按其他移动命令进行删除。
[1] 单词
dw
注意: dw 删除了光标定位在其首部的那个单词,要注意单词后面的空格也被删除掉了。dw 也可被用来删除部分单词。
de 它只删除到单词的尾部
dE 区别是,包括标点符号
db 向后删除一个单词
dB 区别是,包括标点符号
d$ 删除到一行的尾部
d0 删除到一行的首部
[2] 行
dd
对光标所在的整行进行删除,它不能删除行的一部分。类似于它的互补命令cc。
xdd 删除x行
D
用来删除从光标位置到行尾的文本(D是d$的缩写)。
[3] 字符
x 用来删除单个字符。只删除光标所在位置的字符。
X 删除光标前一个字符
可以带上数字前缀,将删除该数字所表示的数量的字符。例如,5x 将删除光标右边的5个字符。
删除操作中遇到的问题
u 取消上次命令操作
U 将该改行恢复到其原来的状态,即对改行进行任何改变之前的状态。
(7) 移动文本 (删除后p或P、xp)
在vi中,先执行删除命令,然后立即输入p或者P实现文本移动。
执行删除命令后立即输入p 可以粘贴命令把位于缓冲区中的文本粘贴到光标位置的后面。
执行删除命令后立即输入P 区别是粘贴到光标的前面。
A、每次删除一个文本块,删除的部分都将暂时保存在一个专用缓冲区中。
B、删除命令后,必须立即使用p或者P,否则删除文本会丢失。而且只要没有进行新的编辑,就可以反复执行粘贴操作。
C、把删除的文本保存到命名缓冲区中,以便在以后可以重复恢复它。
输入xp 可以调换两个字母的顺序。
(8) 复制文本 y
复制命令把选中的文本复制到一个专用缓冲区中,文本将保存在那里直到出现另一个复制操作(或删除操作)。
yy 复制一整行
Y(等价于yy)
复制操作与删除操作使用同一个缓冲区,每个新的删除操作或复制操作将取代复制缓冲区中先前的内容。与修改和删除命令一样,复制命令也可以与任何移动命令结合在一起使用(yw、y$、4yy)。
(9) 重复或撤销最后的命令
在给出下一个命令之前,你所执行的每个编辑命令都将存储在一个临时缓冲区中。例如,如果在文件中的某个单词后插入the,那么用来插入文本的命令以及所输入的文本都将会暂时保存起来。
.(句点)将保存在临时缓冲区中的插入文本命令和插入的文本再次执行一遍。
u 撤销上一步操作(任何位置使用u均可)
U 撤销当前行的所有编辑修改(光标必须在修改行上)
(9)合并两行J
有时在编辑文件时,想合并一系列很难浏览的短行。当要把两行合并为一行时,可以将光标定位在第一行上,然后按下J键来合并这两行。
使用带数字参数的 J 能合并该数量的连续行。例如,可以使用 3J 命令来合并3行。
3、插入文本的常用方法
i 是在光标前面插入文本,a 是在光标后面插入文本。这里还有一些在相对于光标不同位置的地方插入文本的其他命令:
A 在当前行的尾部添加文本(等价于 $a)
I 在行首插入文本(等价与 0i)
o 在光标所在行的下面新建一行,等待输入文本
O 在光标所在行的上面新建一行,等待输入文本
s 使用输入的文本替换光标所在位置的字符(最好用途,是把一个字符改为多个字符)
S 使用输入的文本替换当前行(等价于 cc)
R 使用新字符覆盖现有字符(区别:r 只替换光标所指的一个字符)
所有这些命令都会使vi处于插入模式,在插入文本后,记得按下ESC键返回命令模式。
插入命令的数字参数
除o 和 O 以外,上面的插入命令(加上 i 和 a)都可以带有数字前缀。通过数字前缀,可以使用 i、I、a 和 A 命令插入一排星号或替换字符。
例如,输入 10i* + ESC 可以插入10个星号。(注意:最后必须按 ESC才可以生效)
4、回顾基本的vi命令
编辑命令 |
|||
文本目标 |
修改 |
删除 |
复制 |
1 个单词 |
cw |
dw |
yw |
2 个单词,不计标点 |
2cw 或 c2w |
2dw 或 d2w |
2yw 或 y2w |
向后 3 个单词 |
3cb 或 c3b |
3db 或 d3b |
3yb 或 y3b |
1 行 |
cc |
dd |
yy 或 Y |
到行尾 |
c$ |
d$ 或 D |
y$ |
到行首 |
c0 |
d0 |
y0 |
单个字符 |
r |
x 或 X |
yl 或 yh |
5 个字符 |
5s |
5x |
5yl |
移动 |
|
四个箭头(左下上右) |
h 、 j 、 k 、 l |
到下一行的首字符 |
+ |
到上一行的首字符 |
- |
到单词的尾部 |
e 或 E |
按单词前移 |
w 或 W |
按单词后移 |
b 或 B |
到行尾 |
$ |
到行首 |
0 |
其他操作 |
|
从缓冲区输出文本 |
p 或 P |
启动 vi ,如果指定了文件,就打开该文件 |
vi file |
保存编辑、退出文件 |
ZZ |
不保存编辑、退出文件 |
:q! |
文本创建和操作命令 |
|
在当前位置插入文本 |
i |
在行首插入文本 |
I |
在当前位置追加文本 |
a |
在行尾追加文本 |
A |
在光标所在行的下面新建一行,等待输入新文本 |
o |
在光标所在行的上面新建一行,等待输入新文本 |
O |
删除行并替换文本 |
S |
使用输入的文本替换光标所在位置的字符 |
s |
使用新文本覆盖现有文本 |
R |
合并当前行和下一行 |
J (注意大写) |
转换大小写 |
~ |
重复上次操作 |
. |
取消上次修改 |
u |
恢复行到初始状态 |
U |
虽然只使用这些表所列出的命令就可以运用vi,但是为了掌握vi的真正功能(和提高自己的工作效率),将需要更多的工具。
在后续总结这些工具的用法。
参考 :学习vi编辑器(第六版)