四、行编辑器
行编辑器与屏幕编辑器最大的区别是,屏幕编辑器是对每一个字符进行编辑的,而行编辑器每一条编辑命令所针对的编辑单位是行,即一行进行编辑。
有的地方将行编辑器也称作底线命令模式,由于两种工作模式是可以切换的,所以常将命令模式、输入模式和底线命令模式一起归纳,如下表是这三种模式的进入和退出方法:
名称 | 进入方法 | 退出方法 |
命令模式 | 一开始使用该命令即进入该模式 | 输入:wq ,即可保存并退出 |
输入模式 | 在命令模式下按下i 键 |
通过ESC 键,退出至命令模式 |
底线命令模式 | 在命令模式下按下: 键 |
:vi命令回车Enter 键结束通过,退出至命令模式 |
(一)进入行编辑器
1、通过屏幕编辑器进入
由于行编辑器和屏幕编辑器是可以切换的,所以在vi屏幕编辑器的命令模式下通过输入:即可进入行编辑器,如下可看到我们可在“:”后输入字母、数字、符号等等:
2、从终端进入
另外也可以通过ex后跟文件名称的方式来进入行编辑器,如下:
ex filename
例如通过ex行编下编辑位于/tmp目录下的myfile文件:
[yyx@192 ~]$ ex /tmp/myfile
在Linux终端输入命令,进入行编:
(二)退出行编辑器
1、退回至屏幕编辑器
在行编辑器下,即在:后面输入vi即可返回至屏幕编辑器的命令模式,如下:
然后回车即可返回命令模式,光标停留在行编处理的最后一行的下一行的行首:
2、退出vi编辑器
(1)通过在:后面输入wq,即可写回(覆盖)原文件,并退出vi编辑器;
(2)在:后面输入q,退出vi编辑器;
(3)在:后面输入q!,强行退出vi编辑器(不写文件);
(三)行编的常用命令
1、:n,表示将第n行作为当前编辑行,例如目前当前行是第一行:
通过在:后跟2,即代表将第2行作为当前编辑行,输入:2,回车:
可见当前编辑行光标已移动至第二行行首:
2、:np,表示显示第n行的内容,并将第n行作为当前行,例如:
可见第二行的内容显示在下方,且当前光标已切换至第二行行首:
3、:m,np,表示显示第m行至第n行的内容,并将第n行作为当前行,例如:
显示第二行至第四行的内容,并将第四行作为当前光标所在行:
光标位于第四行:
4、删除操作
(1):d,表示删除当前行的内容;
(2):nd,表示删除第n行的内容,删除后将当前的第n行作为当前光标所在行;
(3):m,nd,表示删除第m行至第n行的内容,删除后将当前的第n行作为当前光标所在行;
5、:a,表示在当前行的下一行输入文本,直到按Esc键为止。
6、替换操作
(1):s/string1/string2/,表示将当前行的第一个字符串string1替换成字符串string2;
(2):m,ns/string1/string2/g,表示把从第m行到第n行中所有字符串string1都替换成字符串string2。
7、(1):r filename,在当前行的后面附加文件名称为filename的文件内容;
(2):nr filename,在第n行的后面附加文件名称为filename的文件内容。
8、(1):w filename,写到文件名称为filename,不退出;
(2):w!filename,强制执行写到文件名称为filename,不退出。
五、vi命令的其他常用选项
(一)恢复上次的编辑副本
vi -r filename
vi后跟-r参数可以对修改过但因意外中断而未保存的文件名称为filename的文件读入编辑缓冲区,使编辑工作继续进行。
(二)设置加密文件
vi -x filename
vi后跟-x参数可对文件名称为filename的加密文件经过输入密码后进行编辑。
例如现在对一个没加密的文件设置密码并编辑该文件,如下命令:
[yyx@192 ~]$ vi -x /tmp/myfile
在Linux终端输入命令:
这里会提示再输入一次密码:
设置好密码后,进入vi编辑器然后保存,再次编辑该文件时就要使用密码才能进入: