Linux循序漸進(22):vi(轉)
Linux循序漸進(22):vi(轉)[@more@] 第二十四課 全螢幕文字編輯器Vi本章介紹Linux上最常用的文字編輯器Vi。文字編輯器是所有計算機系統中最常使用的一種工具。使用者在使用計算機的時候,往往需要建立自己的檔案,無論是一般的文字檔案、資料檔案,還是編寫的源程式檔案,這些工作都離不開編輯器。Linux系統提供了一個完整的編輯器家族系列,如Ed、Ex、Vi和Emacs等,按功能它們可以分為兩大類:行編輯器(Ed、Ex)和全螢幕編輯器(Vi、Emacs)。行編輯器每次只能對一行進行操作,使用起來很不方便。而全螢幕編輯器可以對整個螢幕進行編輯,使用者編輯的檔案直接顯示在螢幕上,修改的結果可以立即看出來,克服了行編輯的那種不直觀的操作方式,便於使用者學習和使用,具有強大的功能。Vi是Linux系統的第一個全螢幕互動式編輯程式,它從誕生至今一直得到廣大使用者的青睞,歷經數十年仍然是人們主要使用的文字編輯工具,足見其生命力之強,而強大的生命力是其強大的功能帶來的。本章中,我們將循序漸進地介紹如何使用Vi來建立、編輯、顯示以及處理檔案。(注:文中的大寫字母為[shift]鍵+相應的小寫字母的組合) Vi簡介Vi是“Visual interface”的簡稱,它在Linux上的地位就彷彿Edit程式在DOS上一樣。它可以執行輸出、刪除、查詢、替換、塊操作等眾多文字操作,而且使用者可以根據自己的需要對其進行定製,這是其他編輯程式所沒有的。Vi不是一個排版程式,它不象Word或WPS那樣可以對字型、格式、段落等其他屬性進行編排,它只是一個文字編輯程式。Vi沒有選單,只有命令,且命令繁多。Vi有三種基本工作模式:命令列模式、文字輸入模式和末行模式。命令列模式任何時候,不管使用者處於何種模式,只要按一下鍵,即可使Vi進入命令列模式;我們在shell環境(提示符為$)下輸入啟動Vi命令,進入編輯器時,也是處於該模式下。在該模式下,使用者可以輸入各種合法的Vi命令,用於管理自己的文件。此時從鍵盤上輸入的任何字元都被當做編輯命令來解釋,若輸入的字元是合法的Vi命令,則Vi在接受使用者命令之後完成相應的動作。但需注意的是,所輸入的命令並不在螢幕上顯示出來。若輸入的字元不是Vi的合法命令,Vi會響鈴報警。文字輸入模式在命令模式下輸入插入命令i、附加命令a 、開啟命令o、修改命令c、取代命令r或替換命令s都可以進入文字輸入模式。在該模式下,使用者輸入的任何字元都被Vi當做檔案內容儲存起來,並將其顯示在螢幕上。在文字輸入過程中,若想回到命令模式下,按鍵即可。末行模式末行模式也稱ex轉義模式。Vi和Ex編輯器的功能是相同的,二者主要區別是使用者介面。在Vi中,命令通常是單個鍵,例如i、a、o等;而在Ex中,命令是以按Enter鍵結束的正文行。 Vi有一個專門的“轉義”命令,可訪問很多面向行的Ex命令。在命令模式下,使用者按“:”鍵即可進入末行模式下,此時Vi會在顯示視窗的最後一行(通常也是螢幕的最後一行)顯示一個“:”作為末行模式的提示符,等待使用者輸入命令。多數檔案管理命令都是在此模式下執行的(如把編輯緩衝區的內容寫到檔案中等)。末行命令執行完後,Vi自動回到命令模式。例如::1,$s / A / a / g則從檔案第一行至檔案尾將大寫A全部替換成小寫a。若在末行模式下輸入命令過程中改變了主意,可按鍵,或用退格鍵將輸入的命令全部刪除之後,再按一下退格鍵,即可使Vi回到命令模式下。Vi編輯器的三種工作模式之間的轉換如圖11-1所示。 如果要從命令模式轉換到編輯模式,可以鍵入命令a或者i;如果需要從文字模式返回,則按Esc鍵即可。在命令模式下輸入“:”即可切換到末行模式,然後輸入命令。第二十五課 Vi的進入與退出 2000年/6月/13日Vi 的進入使用者登入到系統中之後,系統給出提示符“$”。在提示符後鍵入Vi和想要編輯(或建立)的檔名,便可進入Vi。[例1] 鍵入命令:$ vi example.c螢幕顯示如下:~~~~~~~~~~~~~“ example.c” [New File]如果只鍵入Vi,而不帶檔名,也可以進入Vi。之後在游標處鍵入檔案內容,退出Vi時,只需在退出命令後輸入檔名即可。進入Vi之後,首先進入的就是命令模式,也就是說等待命令輸入而不是文字輸入。這時輸入的字母都將作為命令來解釋。游標停在螢幕第一行首位上(用表示),其餘各行行首均有一個“~”符號,表示該行為空行。最後一行也稱狀態行,顯示出當前正在編輯的檔名以及其狀態。如本例是[New File],表示example.c是一個新建的檔案。如果example.c檔案已在系統中存在,那麼輸入上述命令後,則在螢幕上顯示出該檔案的內容,並且游標停在第一行的首位,在狀態行顯示出該檔案的檔名、行數和字元數。[例2] 鍵入命令:$ vi example.c然後鍵入:#includemain ( ){ int k ;for ( k=0 ; k<3 ; k++) add( );}add( ){ static int x=0;x++ ;printf(“x = %d
”, x);}~~~~“ example.c” [ New File]注意,在這裡我們為了節省篇幅起見,螢幕只顯示15行。事實上,初始的顯示行數與使用者所用終端有關,一般的CRT終端可顯示25行。在視窗系統中,顯示行數與執行Vi的那個視窗有關。然而我們可以對顯示行數進行設定。例如,在能顯示25行的CRT終端上,讓Vi只顯示15行。設定的方法將在本節後面介紹。當用Vi建立一個新檔案時,在進入Vi的命令中也可以不給出檔名,當編輯完檔案需要儲存資料時,再由使用者指定檔名。進入Vi時,使用者不僅可以指定一個待編輯的檔名,而且還有許多附加操作。如果希望在進入Vi之後,游標處於檔案中特定的某行上,可在Vi後加上任選項+n,其中n為指定的行數。[例3] 鍵入命令:$ vi +5 example1.c後,螢幕顯示如下:#includemain ( ){ int k ;for ( k=0 ; k<3 ; k++) add( );}add( ){ static int x=0;x++ ;printf(“x = %d
”, x);}~~~~~“ example.c” 12 lines, 125 characters游標將位於檔案example1.c中的第5行上。如果希望在進入Vi之後游標處於檔案最末行,則只需把命令中附加項“+”後面的數字n省略掉即可。在進入Vi時,除了可以指定一個游標起始行號之外,還可以在命令中指定一個模式串,此時在進入Vi後,游標就處於檔案中第一個與指定模式串相匹配的那行上。[例4] 鍵入命令:$ vi +/int example1.c螢幕顯示如下:#includemain ( ){ int k ;for ( k=0 ; k<3 ; k++) add( );}add( ){ static int x=0;x++ ;printf(“x = %d
”, x);}~~~~~“ example.c” 12 lines, 125 characters游標將位於檔案example1.c中的第3行上。使用Vi可以同時編輯多個檔案,只要在進入Vi的命令中寫入所要操作的檔案即可,還可以使用萬用字元。[例5] 鍵入命令:$ vi *.cat就可以編輯所有字尾為cat的檔案了。當然,您還可以使用shell中內建的模式匹配來裝載檔案,這樣會更富技巧性。一旦您在命令列中包含了所有的待編輯檔名,就可以在Vi中方便地移來移去。退出Vi當編輯完檔案,準備退出Vi返回到shell時,可以使用以下幾種方法之一。在命令模式中,連按兩次大寫字母Z,若當前編輯的檔案曾被修改過,則Vi儲存該檔案後退出,返回到shell;若當前編輯的檔案沒被修改過,則Vi直接退出, 返回到shell。在末行模式下,輸入命令:wVi儲存當前編輯檔案,但並不退出,而是繼續等待使用者輸入命令。在使用w命令時,可以再給編輯檔案起一個新的檔名。[例6]:w newfile此時Vi將把當前檔案的內容儲存到指定的newfile中,而原有檔案保持不變。若newfile是一個已存在的檔案,則Vi在顯示視窗的狀態行給出提示資訊:File exists (use ! to override)此時,若使用者真的希望用檔案的當前內容替換newfile中原有內容,可使用命令:w! newfile否則可選擇另外的檔名來儲存當前檔案。在末行模式下,輸入命令:q系統退出Vi返回到shell。若在用此命令退出Vi時,編輯檔案沒有被儲存,則Vi在顯示視窗的最末行顯示如下資訊:No write since last change (use ! to overrides)提示使用者該檔案被修改後沒有儲存,然後Vi並不退出,繼續等待使用者命令。若使用者就是不想儲存被修改後的檔案而要強行退出Vi時,可使用命令:q!Vi放棄所作修改而直接退到shell下。在末行模式下,輸入命令:wqVi將先儲存檔案,然後退出Vi返回到shell。在末行模式下,輸入命令:x該命令的功能同命令模式下的ZZ命令功能相同。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-938918/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux循序漸進(24):vi命令(轉)Linux
- Linux循序漸進(23):Vi的編輯操作及命令(轉)Linux
- Linux循序漸進(09)(轉)Linux
- Linux循序漸進(08)(轉)Linux
- Linux循序漸進(04)(轉)Linux
- Linux循序漸進(07)(轉)Linux
- Linux循序漸進(06)(轉)Linux
- Linux循序漸進(05)(轉)Linux
- Linux循序漸進(03)(轉)Linux
- Linux循序漸進(02)(轉)Linux
- Linux循序漸進(01)(轉)Linux
- Linux循序漸進(16)(轉)Linux
- Linux循序漸進(13)(轉)Linux
- Linux循序漸進(11)(轉)Linux
- Linux循序漸進(10)(轉)Linux
- Linux循序漸進(19):shell(轉)Linux
- Linux循序漸進(21):別名(轉)Linux
- Linux循序漸進(17):列印操作(轉)Linux
- Linux循序漸進(15):磁碟管理(轉)Linux
- 循序漸進linux(二)Linux
- Linux循序漸進(18):netstat命令(轉)Linux
- Linux循序漸進(14):程式排程(轉)Linux
- Docker循序漸進Docker
- 循序漸進教你LINUX之軟體配置方法(轉)Linux
- 循序漸進學習LINUX之LINUX程式設計(轉)Linux程式設計
- 怎樣黑進Microsoft:循序漸進指南 (轉)ROS
- 循序漸進學加密加密
- IT專案外包要注意循序漸進(轉)
- SQL開發 循序漸進SQL
- 循序漸進學習oracleOracle
- Linux循序漸進(20):標準輸入/輸出和重定向(轉)Linux
- CRM專案成功實施在於循序漸進(轉)
- CRM專案成功實施在於循序漸進 (轉)
- 循序漸進DIY一個react(二)React
- 循序漸進DIY一個react(一)React
- 循序漸進DIY一個react(三)React
- 循序漸進DIY一個react(四)React
- 循序漸進理解TypeScript型別模式TypeScript型別模式