程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 從C語言實戰談編程:vi(編輯源程序)上

從C語言實戰談編程:vi(編輯源程序)上

編輯:關於C語言

 

一、 上篇要點回顧和點評

 

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命令繼續你的新程序的插入。

 

待續!


作者 n216

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved