本章介紹linux上最常用的文字編輯器vi。文字編輯器是所有計算機系統中最常使用的一種工具。使用者在使用計算機的時候,往往需要建立自己的檔案,無論是一般的文字檔案、資料檔案,還是編寫的源程式檔案,這些工作都離不開編輯器。
linux系統提供了乙個完整的編輯器家族系列,如ed、ex、vi和emacs等,按功能它們可以分為兩大類:行編輯器(ed、ex)和全螢幕編輯器(vi、emacs)。行編輯器每次只能對一行進行操作,使用起來很不方便。而全螢幕編輯器可以對整個螢幕進行編輯,使用者編輯的檔案直接顯示在螢幕上,修改的結果可以立即看出來,克服了行編輯的那種不直觀的操作方式,便於使用者學習和使用,具有強大的功能。
vi是linux系統的第乙個全螢幕互動式編輯程式,它從誕生至今一直得到廣大使用者的青睞,歷經數十年仍然是人們主要使用的文字編輯工具,足見其生命力之強,而強大的生命力是其強大的功能帶來的。
vi簡介
vi是「visual inte***ce」的簡稱,它在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中,命令是以按回車鍵結束的正文行。vi有乙個專門的「轉義」命令,可訪問很多面向行的ex命令。在命令模式下,使用者按「:」鍵即可進入末行模式下,此時vi會在顯示視窗的最後一行(通常也是螢幕的最後一行)顯示乙個「:」作為末行模式的提示符,等待使用者輸入命令。多數檔案管理命令都是在此模式下執行的(如把編輯緩衝區的內容寫到檔案中等)。末行命令執行完後,vi自動回到命令模式。例如:
:1,$s / a / a / g
則從檔案第一行至檔案尾將大寫a全部替換成小寫a。
若在末行模式下輸入命令過程中改變了主意,可按鍵,或用退格鍵將輸入的命令全部刪除之後,再按一下退格鍵,即可使vi回到命令模式下。
vi編輯器的三種工作模式之間的轉換如圖11-1所示
如果要從命令模式轉換到編輯模式,可以鍵入命令a或者i;如果需要從文字模式返回,則按esc鍵即可。在命令模式下輸入「:」即可切換到末行模式,然後輸入命令。
第二十五課 vi的進入與退出 2023年/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
然後鍵入:
#include
main ( )
add( )~~
~~「 example.c」 [ new file]
注意,在這裡我們為了節省篇幅起見,螢幕只顯示15行。事實上,初始的顯示行數與使用者所用終端有關,一般的crt終端可顯示25行。在視窗系統中,顯示行數與執行vi的那個視窗有關。然而我們可以對顯示行數進行設定。例如,在能顯示25行的crt終端上,讓vi只顯示15行。設定的方法將在本節後面介紹。
當用vi建立乙個新檔案時,在進入vi的命令中也可以不給出檔名,當編輯完檔案需要儲存資料時,再由使用者指定檔名。
如果希望在進入vi之後,游標處於檔案中特定的某行上,可在vi後加上任選項+n,其中n為指定的行數。
[例3] 鍵入命令:
$ vi +5 example1.c
後,螢幕顯示如下:
#include
main ( )
add( )~~
~~~「 example.c」 12 lines, 125 characters
游標將位於檔案example1.c中的第5行上。
如果希望在進入vi之後游標處於檔案最末行,則只需把命令中附加項「+」後面的數字n省略掉即可。
在進入vi時,除了可以指定乙個游標起始行號之外,還可以在命令中指定乙個模式串,此時在進入vi後,游標就處於檔案中第乙個與指定模式串相匹配的那行上。
[例4] 鍵入命令:
$ vi +/int example1.c
螢幕顯示如下:
#include
main ( )
add( )~~
~~~「 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。
在末行模式下,輸入命令:w
vi儲存當前編輯檔案,但並不退出,而是繼續等待使用者輸入命令。在使用w命令時,可以再給編輯檔案起乙個新的檔名。
[例6]
:w newfile
此時vi將把當前檔案的內容儲存到指定的newfile中,而原有檔案保持不變。若newfile是乙個已存在的檔案,則vi在顯示視窗的狀態行給出提示資訊:
file exists (use ! to override)
此時,若使用者真的希望用檔案的當前內容替換newfile中原有內容,可使用命令
:w! newfile
否則可選擇另外的檔名來儲存當前檔案。
在末行模式下,輸入命令:q
no write since last change (use ! to overrides)
提示使用者該檔案被修改後沒有儲存,然後vi並不退出,繼續等待使用者命令。若使用者就是不想儲存被修改後的檔案而要強行退出vi時,可使用命令:q!
vi放棄所作修改而直接退到shell下。
在末行模式下,輸入命令:wq
vi將先儲存檔案,然後退出vi返回到shell。
在末行模式下,輸入命令:x
該命令的功能同命令模式下的zz命令功能相同。
vi中的行號
vi中的許多命令都要用到行號及行數等數值。若編輯的檔案較大時,自己去數是非常不方便的。為此vi提供了給文字加行號的功能。這些行號顯示在螢幕的左邊,而相應行的內容則顯示在行號之後。
使用的命令為:在末行方式下輸入命令:
:set number
需要說明的是,這裡加的行號只是顯示給使用者看的,它們並不是檔案內容的一部分。
在乙個較大的檔案中,使用者可能需要了解游標當前行是哪一行,在檔案中處於什麼位置,可在命令模式下
linux vi編輯器命令以及語法
vi命令是unix作業系統和類unix作業系統中最通用的全螢幕純文字編輯器。linux中的vi編輯器叫vim,它是vi的增強版 vi improved 與vi編輯器完全相容,而且實現了很多增強功能。vi編輯器支援編輯模式和命令模式,編輯模式下可以完成文字的編輯功能,命令模式下可以完成對檔案的操作命令...
Linux VI編輯器詳解
進入輸入輸出的方法 命令 作用 在游標後輸入文字 在當前行末尾輸入文字 在游標前輸入文字 在當前行開始輸入文字 在當前行後輸入新一行 在當前行前輸入新一行 游標移動 命令作用 移動到當前單詞的開始 移動到當前單詞的結尾 向前移動乙個單詞 向前移動乙個字元 向上移動一行 向下移動一行 向後移動乙個字元...
關於linux vi編輯器
1,命令列模式 最初進來的模式 3,底行模式 輸入 進入 游標位於螢幕的底行,可以進行檔案的儲存 退出 查詢 替換 列出行號等 2,i 從游標所在行的第乙個非空格插入 i 從游標所在位置插入 3,o 在游標所在行的上部新增一行 o 從游標所在行的下部新增一行 第三 vi拷貝與貼上 1,5yy 游標向...