博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从C语言实战谈编程:vi(编辑源程序)上(2011-11-22)

Posted on 2011-11-23 08:29  n216  阅读(4221)  评论(3编辑  收藏  举报
 

、 上篇要点回顾和点评

1、    上篇对hello world程序进行了比较深入分析。

2、    一个完整程序是什么样的?分几个部分组成?请回顾一下!

3、    谈了main,这个是讨论最激烈的话题。请问为啥我没有写成 int main(void)?

4、    上篇还谈了,语法、函数的调用、.h的引用、关键字、转义符、流。还记得吗?

5、    知道exit和return的区别和用的地方吗?

6、     布置了思考题:显示三个hello world!你是怎样完成的?

1)连续写3行fprintf

2)用循环语句循环3次fprintf

3)在原fprintf中hello world!\n后面,添加hello world!\n hello world!\n

4)其他方法。

你是用哪种方法?。

出这思考的目的就是告诉大家,一个问题有很多答案,但是不同答案一定有优劣之差。我们不但要给出答案,而且要给出最佳答案,这样我们才能提升我们的编程水平。

7、     上篇最重要的是,提出来程序好坏的比较的量化标准,那就是程序的长短。没有了量化标准,任何一个程序员都会说自己的最好,(很多人习惯这种思维方式,用每个人有每个人方法,这样可以保护自己的弱点,但是他们不知道,这种保护是你进步最大的障碍)如果这样程序也无所谓好坏来,但是,事实上程序差距是很大的。其他的方面的好坏都应该建立这个基础之上。

二、 编辑在C语言中的作用

    1、编辑的概念和内容  

我们一直说编程的流程:编辑、编译、运行.其中,编辑是编程的第一步。你能说出什么是编辑?编辑文件有哪些吗?一般而言编辑主要是指编辑工具和编辑内容两个方面。编辑工具是指编辑文件的软件。而编辑内容主要是建立项目中的各种源程序、批处理程序和参数文件。记住:编辑是指1、编辑各种源程序 2、批处理程序 3、参数文件。记住这些我们可以有个概念上的掌握。有了这个概念的掌握,今后我们就可以有意识地去去知道我们要掌握那些东西,为这些做好准备。

1)      源程序

是指包含程序语言的语句,通过编译可以变成可执行文件和中间文件。例如,C语言中的 *.c、 *.h文件.

2)      批处理文件

是指操作系统可以逐行执行的文本文件。这个在C语言中应用很多,例如,批编译命令文件、shell命令等。

3)      参数文件

是指程序中为了灵活适应特定的变化,而建立的数据文件。参数文件的特点是不可执行,但可以被程序所调用。

 

  2、编辑工具  

从理论上来说,任何文本编辑软件都可以作为程序的编辑工具。记住这句话有什么用?就是当你想去修改一个源程序的时候,不必非要安装这个语言的开发环境,随手找个编辑软件编辑一下就可以了。由于源程序是文本文件,所以只要能够打开这个文件就可以编辑了。

给新手回忆一下过去的C语言编辑软件:开始的时候,编辑软件和程序设计语言是相分离的。DOS系统那时用的是EDLINE,unix 用的是vi。后来DOS用的是EDIT,再后来用的是记事本、word等,再后来就直接用语言中自带的文本编辑器了。

 

   3、编辑的作用

   1、产生源程序

      如果我们连编辑都不会,那我们就无法产生源程序,那我们就无法成为程序员了。程序员第一个职责可能就是会编写程序。可见掌握编辑工具是多么重要。

   2、编辑程序

      程序并不是一次产生就ok,在绝大多数情况下,程序员要不断地修改,不断地增加自己的程序,而编辑正是实现这种修改的有利的工具,没有编辑工具,发现程序错误,就可能无法修改。

   3、调试程序

      我们在调试程序的时候,会查看源程序到底是怎么写的。dbx 这个C语言调试程序中就提供了一个e命令,用vi打开源程序,以帮助调试者去发现错误的原因。

   4、编辑程序用到的参数文件和批命令文件

     现实中很少有那种没有参数的C语言的应用程序,C语言需要输入,才能加工后输出,因此程序员不但要编写程序,而且还要编辑参数文件,以便程序顺利运行。

     另外,一个问题的解决很少是一个程序就能摆平的,因此,逻辑性地运行不同的程序,即使得程序更加模块,又可以使得程序组合更加灵活,更可以让程序象接龙一样,不断向前。因此,编辑批命令文件也是编辑程序一个重要的功能。

三、 如何学习vi

  下面言归正传,C语言可以有很多编辑程序:有行编辑,有屏幕编辑,有unix的编辑,有window的编辑,有功能强大的编辑程序,也有功能简单的编辑程序,有开发语言自带的编辑程序,也有独立的编辑程序。以我的经验,如果你是专业从事unix环境的后台程序开发的,且用C语言的,vi一定是首选的编辑程序。

1、       首先学习vi并不难,千万不要有畏难情绪,任何人都能学会,而且时间不长,有人指导,一般一天就足够入门了。

2、       最好找一个懂vi的人作为咨询对象,不要抱着书学,然后就可以开始进行了。

3、       注意学习方法,先不要问为啥,先按要求去做,学会模仿,然后再自己琢磨。

4、       在练习之前,大家要记住2点:第一,vi不是一个屏幕编辑器,而是一个行编辑,以行为单位进行的编辑。不用鼠标,只能手打。第二个,vi是一个区分大小写的。因此要特别注意vi中各种命令的大小写。

下面我以实战方式,试着教教大家学习vi。

 

第一步:学习进入vi和退出vi

     首次学习vi的朋友,可以先从运行vi开始。

我们假定编辑的文件名为a.c,则在操作系统的命令行状态下,键入:vi a.c(命令行结束都需要键入回车,这里就不在提示了.另,注意在UNIX操作系统下是认大小写的,不要将vi写成大写VI)

这时你则进入了vi.这时你会看到在屏幕的左下方,显示a.c [New file],这是vi告诉你,你正在编辑a.c,a.c是一个新文件。

进入后,你别急于编辑文字。立即键入::q回车。这时你从vi退出到操作系统命令行状态了。q应该是quit缩写吧。

将进入和退出操作多练习几遍,你就已经学会了使用最简单的vi了。在此间,你要克制如何编辑冲动,先把进入和退出掌握好。学习的时候,我们往往往前考虑过多,其实没有必要,一般只要按部就班学习就行了。在眼前,就学眼前,不要多想。第一步会了,我们往下走。

第二步,学习增加字符串。

这个步骤就是学习如何在vi中增加一个字符串,或者说录入一个字符串。假定,我们要在a.c中录入,“hellow world!”这个字符串。 请按下面次序一字不漏地输入,别输错字符。

1)vi a.c

2)i

3)hellow world!

4)Esc

5):

6)x

如果你顺利输入完之后,这个a.c就有了“hellow world!”

你可以在命令行输入cat a.c就能看到:hellow world!,恭喜你会了录入字符串了。

这时你要记住:i是增加命令,表示此后的键入的字符都将录入其中,除非遇到Esc结束这个增加。所以,当你要录入字符串的时候,第一个就要想到i命令,这个命令我是这样记的:i就是insert。

你可以试着编辑一个b.c 内容是 hello myself!看看行吗?

 

第三步,学习修改、删除。

我们在编辑程序的时候,不可能一次增加就能完成。总是要修改,删除,增加。接上面的例子,我们要将a.c中的hello world!改成hello myself。

第一种方法:

1、vi a.c

2、dd

3、i

4、hello myself。

5、Esc

6、:

7、x

这种方法是同过dd命令将原来一行删掉,再通过i命令录入hello myself。来完成的。这种方法重点是dd命令,记住删除一行要用dd(delete,delete,我是这样记忆的)。

第二种方法:

1、vi a.c

2、将光标移到world

3、xxxxxx

4、i

5、myself。

6、Esc

7、:

8、x

这种方法重点是x命令,删除当前字符,这也是最常用的命令之一。

第三种方法:

1、vi a.c

2、将光标移到world

3、xxxxx

4、i

5、myself

6、Esc

7、移动光标到!

8、r

9、。

10、:

11、x

这种方法重点是r命令(replace),替换当前字符,这也是最常用的命令之一。

第四种方法:

1、vi a.c

2、将光标移到world

3、cw

4、myself。

6、Esc

10、:

11、x

这种方法重点是cw命令(change word),替换当前单词,注意它也需要Esc结束修改状态,这也是最常用的命令之一。

大家都看到了吧,所有以上方法都是用:x来保存编辑内容的。:x也是最常用命令之一。

如果发现这次编辑错了,乱了,想放弃这次对文件的编辑,不想对原程序进行任何修改。则可以用:q!命令放弃修改退出vi。!可以记忆为强制,q!可以理解为强制退出。同理x!理解为强制保存。

通过以上三步的学习和练习,我们基本上可以接触到vi的基本操作过程和操作命令了。这些基本的操作可以说能够编制程序了。

你们可以试着用以上方法,编辑一下我前几篇博客中的a.c。文件名可改为helloworld.c

 #include “stdio.h”

 main()

 {

       fprintf(stdout,”hello world!\n”);

      exit(0);

   }

感觉一下vi操作,看看自己对以上最基本命令的掌握程度。对基础的东西要反复练习,认真记住,这样才会对后面的操作命令有更好的理解和配合。学会以上操作可以说你vi已经入门了。

第四步,学习复制、查询、取消

我们在编辑程序的时候,一般情况下都是增删改操作,这时候我们的视野仅仅局限在单字符、单词、单行。在很多情况下,需要行操作,例如我们需要新增行,我们需要复制,需要先复制再修改。

我们还是举前面一个例子。现在a.c内容为hello myself。

现在要求最终的内容为三行:

hello myself

hello world

hello c

第一种方法,先复制,后修改。

1、vi a.c

2、yy

3、p

4、p

5、向上移动一行

6、移动到myself(第二行)

7、cw

8、world

9、Esc

10、移动到下一行

11、移动到myself(第三行)

12、cw

13、c

14、Esc

15、:x

这种方法的重点是复制,粘贴。yy是复制当前行,p是粘贴复制的行。这是我认为vi最经典的命令设计之一,它可能是我们Ctrl-c ,Ctrl-v的鼻祖。

第二种方法:直接插入法

1、vi a.c

2、o

3、hello word

4、hello c

5、Esc

6、:x

这种方法的重点是在当前行下插入。o是插入命令,表示在当前行下插入,Esc插入结束。如果要在当前行上面插入行输入大写O则可以了,退出插入也是Esc。

第三种方法:复制查询修改法。

1、vi a.c

2、yy

3、p

4、p

5、:1

6、/

7、myself

8、n

9、cw

10、world

11、Esc

12、n

13、cw

14、c

15、Esc

16、:x

法的重点是先复制了2行hello myself,然后通过:1命令让光标移到文件头(这个命令非常有用),然后用/命令进行查找myself,用n(next)命令移到第二个myself单词上,用cw进行修改,然后再用n命令,移到第三个myself上,用cw修改。/命令是查找命令,n是下一个。现在一些开发语言中也有同样的查询命令,估计也借鉴了vi。

我们在进行操作时候,往往会操作出错,这时候,vi提供了一个u(undo吧)命令,用于取消前次操作。

例如,当你复制2行时候,发现复制了3行的时候,你键入u,则

1、vi a.c

2、yy

3、p

4、p

5、p

6、u

这个时候,你最后一次,粘贴将会被取消。

这个例子的重点是介绍取消操作u,这个命令可以用于很多种操作,比如,i、I、O、o、A、x、r、dd、cw、s等等。在这些操作之后,键入u,前面的操作将被取消。

另外,介绍一个G命令,这个命令可以让光标定位到文件的最后一行。

例如:文件内容为:

Hello world

Hello myself

Hello c

当前光标在第一行

键入G,光标就定位在最后一行hello c上了。这个命令对于建立一个程序的时候,特别有用。比如,今天编了一段程序,明天再接着编,就可以用G命令一下子到最后一行,然后,用o命令继续你的新程序的插入。

待续!