接上
第五步,学习多次操作命令
vi为了避免反复操作,vi设计了多次操作命令,操作为:操作次数+操作命令。这样大大提高了编辑的效率。
例如1:要删去50行。我们可以连续50次dd,但是,我们更应该利用多次操作命令,输入50dd就ok了!
例如2:要复制当前行以下的50行,我们可以键入:
1、50
2、yy
3、将光标移到第50行
4、p
这个命令非常非常有用,且考验编程者的眼力。比如,我们常常要编写一个while、for等循环语句或一个函数。我们往往会将以前的while、for等循环语句或函数拷贝过来,做些修改。而拷多少条语句这就要看编程者的眼力了。比如,实际要拷35条。而如果编程者认为这段语句是30条,则要重新再拷5条。如果编程者这段语句是40条,则要在拷贝后,删除5条。如果编程者一眼就能看出要拷35条,那就如同中奖一样的高兴。毕竟眼力准确可以减少额外的操作。
例如3,将hello myself 改成hi world
1、将光标移到hello
2、2
3、cw
4、hi world
5、Esc
上面的2表示将修改2个单词。
多次操作是一次操作的重复,不学多次操作,也可以通过一次一次操作完成,但是,超过2次,超过3次以上的操作,选择多次操作,可以大大提高编辑效率。
第六步,vi 命令行
vi不但在可以在编辑对象上进行各种操作,而且可以在vi的命令行上进行操作。这个命令行是通过键入“:”产生的,在文件的屏幕的最后一行。
我们的第一步中的,q命令,就是一个命令行的命令。
上面介绍的q!,x,x!命令都是命令行命令。
下面介绍一个有用行删除的命令。
假定文件内容为:
Hello world
Hello myself
Hello c
当前光标在第一行
1、现要求,将第二行到第三行删除。
方法1:将光标移至第二行,输入dddd。这个上面讲的一种方法。
方法2:
1,:
2,2,3d
这种方法是在命令行输入d命令。表示,从第二行到第三行都要删除。这种方法也叫绝对删除法。
方法3:
1,将光标移到第二行
2,:
3,.,+1d
这种方法也是命令行命令。表示从当前行(.)到当前行后面的一行(+1)进行删除。这种方法叫相对删除法。意思删除的行是相对于当前行的。
方法4:
1,当前光标在第一行
2,:
3,+1,+2d
这种方法上,表示,将第一行的下面一行到第一行下面的第二行之间全部删除。
方法5:
1,:
2,2,$d
这种方法表示将第二行,到文件的最后一行都删掉。$表示文件的最后一行。这个命令也十分有用。
如果我们不知道我们当前行是哪一行,我们可以键入:ctrl-g,这个时候,命令行就会出现提示:The cursor is at line 1 of 3—33%--,就可以看到当前行是第几行,整个文件有多少行了。其中1是当前行,3是所有的行。
Ctrl-g也是很常用的命令。
在vi长期实践中,相对法用于删除20行之内语句比较有效,快捷;绝对法用于删除大批语句有效。
2、替换所有hello 为hi
1,:
2,1,$s/hello/hi/g
我是这样理解这个命令的:从第一行到最后一行,查到(s)hello用hi来全部(g)替换。这样今后就忘不了了。
第七步,读文件,写文件
前面都是基于语句级、单词级的编辑。在我们初学vi的时候,十分有用,在我们编写少量的C语言时候,也很有用,也足够了。但是,当我们编写的C语言程序越来越多的时候,我们看到的别人C语言程序越来越多的时候,我们往往会复制别人的程序和自己的程序,会复制某一段成程,用在自己的程序之中。这个时候,我们就会出现一个以文件级程序“复制、粘贴”的操作。
例如,我们要将a.c中的open_deal这个函数,拷贝到b.c中。
1,vi a.c
2,/open_deal
3,n
4,ctl-g
5,记下当前行,假定243
6,将光标移到open_deal最后一行
7,ctl-g
8,记下当前行,假定343
9,:
10,243,343w open.c
11,q!
12,vi b.c
13,将光标移动open_deal要放的地方那一行。
14,:
15,r open.c
16,:
17,x!
这个例子,有两个重点,一个是243,343w open.c.这个操作说明,将第243行到343行的open_deal函数程序,写到open.c文件之中。
另个重点是,r open.c,这个操作说明,将open.c 读到当前行之下。
通过w和r我们完成了函数的复制和粘贴。
很多情况下,我们会将整个文件r进来,在进行修改的。
此外,很多情况下,我们会起找一下我们过去的程序,去找一下某一个我们想要的函数,和一些语句的用法,但是,我们又不知道在那个文件之中。这个时候,我们可以通过同时打开多个文件的方法,一个一个文件去查看是否有我们想要的东西,一旦发现,我们就会知道这个函数在那个文件之中了。
例如,假定我们的目录下,有a1.c,a2.c,a3.c,b1.c,b2.c,b3.c六个文件,我们记得其中有一个名为open_deal函数,我们想改造这个函数,但是,我们不知道这个函数在什么文件之中。这时候我们可以这样操作。
1,vi *.c
2,/open_deal
3,:n
4,/open_deal
直到找到为止。
这里重点有2个,一是vi *.c,表示编辑所有的.c文件;二是,:n(next)读下一个文件。
找到open_deal之后,你可以通过w命令,将函数写成一个文件,以便以后r用。
学习vi一定要从简单到复杂,从第一步到第七步要慢慢而来,不要着急,一口吃个胖子。第一步到第四步是入门和基础,了解需要半天到一天,操作练习估计要2天到3天,后面几步也要3天左右。有人在旁,估计1周掌握vi应该不成问题。但是要精通vi则是很难给出一个时间的。我可以肯定地说,如果你能掌握这7个步骤,几乎所有的C语言的编写是没有问题的(编辑方面)。
四、Vi命令小结
将我认为的vi常用的命令小结一下,便于大家查询(其他命令因为很少用,我就不列举在其中了,想学的可以去网上查询。)
1、 进入和退出vi
1)vi 文件名 编辑一个文件。
2)vi *.c 编辑多个文件。
3):q 退出vi(不保存退出,文件没有被编辑过)。
4):q! 退出vi(不保存退出,文件被编辑过)。
5):x 退出vi(保存退出)。
6):x! 退出vi(保存退出,文件被编辑过)。
2、 增加、修改、删除、查询、取消命令
1)i 在当前字符前插入,Esc退出插入状态
2)I 在行首插入,Esc退出插入状态
3)a 在当前字符后插入,Esc退出插入状态
4)A 在行尾插入,Esc退出插入状态
5)o 在当前行下面插入,Esc退出插入状态
6)O 在当前行上面插入,Esc退出插入状态
7)