1.2 嵌入式Linux编辑器vi的使用
vi是Linux系统的第一个全屏幕交互式编辑工具。它从诞生至今一直得到广大用户的青睐,历经数十年后仍然是人们主要使用的文本编辑工具,足见其生命力之强,其强大的编辑功能可以同任何一款最新的编辑器相媲美。
虽然用惯了Windows中的Word等编辑器的读者在刚刚接触vi时或多或少会有些不适应,但使用过一段时间后,就能感受到它的方便与快捷。
小知识
Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便,而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,从而克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。
1.2.1 vi的基本模式
vi编辑器具有3种工作模式,分别是命令行模式(Command Mode)、插入模式(Insert Mode)和底行模式(Last Line Mode),各模式的功能区分如下。
1.命令行模式
在该模式下用户可以输入命令来控制屏幕光标的移动,字符、单词或行的删除,移动复制某区段,也可以进入到底行模式或者插入模式下。
2.插入模式
用户只有在插入模式下才可以进行字符输入,用户按【Esc】键可回到命令行模式下。
3.底行模式
在该模式下,用户可以将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、显示行号等。这一模式下的命令都以“:”开始。
不过在一般使用时,人们通常把vi简化成两个模式,即将底行模式也归入命令行模式中。
1.2.2 vi的基本操作
1.进入与离开vi
进入vi可以直接在系统提示符下键入vi <文档名称>,vi可以自动载入所要编辑的文档或是创建一个新的文档。例如,在shell中键入“vi hello.c”(新建文档)即可进入vi画面,如图1.1所示。
图1.1 在vi中打开/新建文档
进入vi后,屏幕最左侧会出现波浪符号,只要有该符号就代表该行目前是空的。默认进入的是命令行模式。
要离开vi,可以在底行模式下键入“:q”(不保存离开),“:wq”(保存离开)则是存档后再离开(注意冒号),如图1.2所示。
图1.2 在vi中退出文档
2.vi中3种模式的切换
vi的使用中,3种模式的切换是最常用的操作。
在处理的过程中,要时刻注意屏幕左下方的提示。在插入模式下,左下方会有“插入”字样,而在命令行或底行模式下则无提示。
1)命令行模式、底行模式转为插入模式
从命令行模式或底行模式转入到插入模式有3种方法,如表1.1所示。
表1.1 命令行模式转到插入模式
在这里,最常用的是“i”,在转入插入模式后如图1.3所示。
图1.3 命令模式转入插入模式
2)插入模式转为命令行模式、底行模式
从插入模式转为命令行模式、底行模式比较简单,只需使用【Esc】键即可。
3)命令行模式与底行模式的转换
命令行模式与底行模式间的转换不需要其他特别的命令,只需要直接键入相应模式中的命令键即可。
3.vi的删除、修改与复制
要在vi中进行删除、修改,都可以在插入模式下使用键盘上的方向键及【Delete】键,另外,vi还提供了一系列的操作指令,可以大大简化操作。
这些指令记忆起来比较复杂,希望读者能够配合操作来进行实验。以下命令都是在命令行模式下使用的。
如表1.2所示为vi的删除、修改、复制与粘贴命令。
表1.2 vi的删除、修改与复制命令
4.vi的光标移动
由于许多编辑功能都是通过光标的定位来实现的,因此,掌握vi中光标移动的方法很重要。虽然使用方向键也可以实现vi的操作,但vi的指令可以实现复杂的光标移动,只要熟悉以后都非常方便,希望读者都能切实掌握。
如表1.3所示为vi中的光标移动指令,这些指令都是在命令行模式下使用的。
表1.3 vi中光标移动的命令
5.vi的查找与替换
在vi中的查找与替换也非常简单,其操作有些类似在Telnet中的使用。其中,查找的命令在命令行模式下,而替换的命令则在底行模式下(以“:”开头),其命令如表1.4所示。
表1.4 vi的查找与替换命令
6.vi的文件操作指令
vi中的文件操作指令都是在底行模式下进行的,所有的指令都是以“:”开头的,其命令如表1.5所示。
表1.5 vi的文件操作指令
1.2.3 vi的使用实例分析
本节给出了一个vi使用的完整实例,通过这个实例,读者一方面可以熟悉vi的使用流程,另一方面也可以熟悉Linux的操作,希望读者能够首先自己思考每一步的操作,再看后面的实例解析答案。
1.vi使用实例内容
(1)在/root目录下建一个名为vi的目录。
(2)进入vi目录。
(3)将文件/etc/passwd复制到当前目录下。
(4)使用vi编辑当前目录下的passwd。
(5)将光标移到第18行。
(6)复制该行内容。
(7)将光标移到最后一行行首。
(8)粘贴复制行的内容。
(9)撤销第8步的动作。
(10)将光标移动到最后一行的行尾。
(11)粘贴复制行的内容。
(12)将光标移到第20行。
(13)删除该行。
(14)存盘但不退出。
(15)将光标移到首行。
(16)插入模式下输入“Hello,this is vi world!”。
(17)返回命令行模式。
(18)向下查找字符串“linux”。
(19)向上查找字符串“sys”。
(20)强制退出vi,不存盘。
2.vi使用实例解析
在该实例中,每一步的使用命令如下所示。
(1)mkdir /root/vi
(2)cd /root/vi
(3)cp /etc/inittab ./
(4)vi ./inittab
(5):18<enter>
(6)yy
(7)G
(8)p
(9)u
(10)$
(11)p
(12):20<enter>
(13)dd
(14):w<enter>
(15)1G
(16)i 并输入“Hello,this is vi world!”
(17)按【Esc】键
(18)/linux
(19)?sys
(20):q!