從菜鳥到專家 vi編輯器全程教學

victorymoshui發表於2011-02-28

我們在使用vi編輯器的時候還是會遇到不少困惑的地方,尤其是在Linux或UNIX中的基本使用方法,其實這些問題歸根結底還是在於我們對相關的知識掌握不牢固。在本文中,您將學習vi編輯器的基本使用方法,希望對您在之後的使用中有所幫助。

使用vi導航文件

使用基本的vi模型

 

插入、編輯、刪除、複製和查詢文字

 

本文將幫助您準備 Linux Professional Institute's Junior Level Administration (LPIC-1) 考試的 103 主題下的 103.8 考核目標。該考核目標的權值為 3。

 

先決條件

為了從本文獲得最大的收益,您應該具備基礎的 Linux 知識,並且具有一個能夠正常執行的 Linux 系統,以便練習本文討論的命令。不同版本的程式輸出的結果的格式可能不同,因此您的結果可能與本文圖片和清單所示的結果有所不同。

 

使用vi導航文件

 

聯絡 IanIan 是我們最受歡迎並且很多產的作者之一。檢視 Ian 的個人資料 並與他和 My developerWorks 上的其他作者和讀者聯絡。幾乎所有的 Linux 和 UNIX 系統上都有vi編輯器。事實上,如果系統只有一個編輯器,那它一定就是vi,因此深入瞭解vi是很值得的。本文將向您介紹一些基本的vi編輯命令,但有關完整的vi教程,請檢視我們關於vi的教程 “vi 介紹 —— 快速參考表”,或者諮詢人工頁面或參考相關書籍。

啟動vi

大部分 Linux 發行版現在都帶有vim(表示viIMproved)編輯器而不是經典的vi。Vim 與vi是向上相容的,具有可用的圖形模式(gvim)以及標準的vi文字模式介面。vi 命令通常是一個vim 程式的別名或符號連結。有好幾個vim 版本:微型、小型、普通、大型和超大型。您可以使用以下命令找到執行哪個版本,以及該版本包括哪些功能:

vi --version

 

回憶之前的文章 “學習 Linux,101:程式執行優先順序” 修改優先順序中的一節,我們希望更改執行 count1.sh shell 指令碼的優先順序。您自己測試時可能會發現,命令執行得太快,以至於沒有足夠的時間使用 renice 更改優先順序。那麼我們可以使用vi編輯器在檔案的開始處新增一行,讓其休眠 20 秒,以便有時間更改優先順序。

 

如果還沒有 count1.sh 程式,在主目錄開啟終端視窗並從清單 1 中貼上命令。這將在名為 lpi103-8 的目錄中建立一個 count1.sh,並將您帶入該目錄中。

清單 1. CPU 密集型指令碼 - count1.sh  

 

 

 

  1. mkdir -p lpi103-8 && cd lpi103-8 && {  
  2. echo 'x="$1"'>count1.sh  
  3. echo 'echo "$2" $(date)'>>count1.sh  
  4. echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh  
  5. echo 'echo "$2" $(date)'>>count1.sh  

 

 

 

要編輯現有檔案,可以使用vi命令並將檔名作為引數。參考 參考資料 中的手冊瞭解更多主題的詳情。現在,只需要使用不帶引數的命令:

 

vi count1.sh

 

該命令將開啟 count1.sh 檔案。您應該看到類似於清單 2 的內容。如果您使用的是vim,一些字或字母可能有顏色。Vim 有一個語法高亮模型(它不是原始vi編輯器的一部分),預設情況下,在您的系統中它應該是開啟的。

 

 

清單 2. 使用vi編輯 count1.sh

 

 

 

  1. x="$1" 
  2. echo "$2" $(date)  
  3. while [ $x -gt 0 ]; do x=$(( x-1 ));done  
  4. echo "$2" $(date)  
  5. ~  
  6. ~  
  7. ~  
  8. ~  
  9. "count1.sh" 4L, 84C 1,1 All 

 

 

開發vi編輯器時並非所有終端鍵盤都有游標移動鍵,因此您在vi中只能使用標準鍵盤中能找到的鍵,以及 Esc 和 Insert 等鍵。但是,您可以配置vi使用其他鍵(如果可用);鍵盤上的大部分鍵在vi中都能做一些很有用的事情。因為這種遺留情況以及早期終端連線較慢的本質,vi 自然有了命令簡單和神祕的名聲。我們先來檢視用於在檔案中導航的鍵。

 

移動

以下命令可以幫助您在檔案內移動:

 

 

 

  1. h 在當前行往左移動一個字元   
  2. j 向下移動到下一行   
  3. k 向上移動到上一行   
  4. l 在當前行往右移動一個字元   
  5. w 移動到當前行下一個字   
  6. e 移動到當前行下一個字的結束處   
  7. b 移動到當前行上一個字的開始處   
  8. Ctrl-f 向前滾動一頁   
  9. Ctrl-b 向後滾動一頁  

如果在這些命令之前鍵入數字,則命令將執行該數字表示的次數。該數字稱為重複次數 或者就稱為計數。例如,5h 將向左移動 5 個字元。許多vi命令都可以使用重複計數。
 

移動到行

以下命令將幫助您移動到檔案的特定行:

 

 

 

  1. G 移動到檔案的特定行。例如,3G 移動到第 3 行。如果沒有引數,
    G 將移動到檔案的最後一行。   
  2. H 相對於螢幕移動到最上面的行。例如,3H 將移動到螢幕上方往下第三行。   
  3. L 就像 H 一樣,不同之處在於移動到螢幕的最後一行。因此,
    2L 移動到螢幕的倒數第二行。   
  4. 離開 vi 關於一個新的編輯器,就有用的一件事情是瞭解如何在做了不該
    做的事情前離開編輯器,比如要避免銷燬重要的配置檔案。您可以在儲存
    或丟棄更改的情況下離開 vi,也可以用重新啟動的方式。如果這些命令無效,
    您可能處於插入模式,這將在後文介紹。如果是這樣,可以按 Esc 
    退出插入模式並返回到命令模式,這些命令就會生效。  
  5. :q! 退出編輯檔案並放棄所有更改。這是避免麻煩的常用手段。   
  6. :w! 寫入檔案(無論是否修改)。嘗試重寫現有檔案或只讀檔案,
    或者其他不可寫檔案。您可以給定一個檔名作為引數,寫入的將是這個
    檔案而不是開始的檔案。忽略 ! 通常會更加安全,除非您知道您在做什麼。   
  7. ZZ 如果修改了檔案,則寫入檔案。是普通 vi 退出常用的方法。   
  8. :e! 編輯檔案的當前磁碟副本。這將過載檔案,放棄所做的更改。
    如果磁碟副本出於某些原因發生了更改,並且您需要最新的版本,那麼可以使用這種方法。   
  9. :! 執行一個 shell 命令。鍵入命令並按 Enter。當命令完成時,
    您將看到輸出和提示返回到 vi 編輯。
    注意:

 

當您鍵入冒號 (:) 時,您的游標將移動到鍵入命令和任何引數的螢幕的下一行。

如果忽略上述命令的感嘆號,您將收到一條錯誤訊息,比如更改沒有儲存,輸出檔案無法重寫(例如,編輯只讀檔案時)。

 

: 命令有一個較長的形式(:quit, :write, :edit),但是很少使用。

 

vi 模式

vi 編輯器有兩種操作模式:

命令模式

在命令模式中,您可以在檔案中移動並執行一些編輯操作,比如搜尋文字、刪除文字等。啟動時通常都是命令模式。

 

插入模式

 

在插入模式中,您在插入點向文字鍵入新文字。要返回到命令模式,按 Esc(Escape)鍵。

 

這兩個模式決定了編輯器的行為。您在插入模式中鍵入的任何內容都將視為將要插入檔案的文字。如果嘗試鍵入命令但沒有反應,或者在游標下出現字元,那麼可能是忘記按 Esc 退出插入模式了。

 

 

編輯文字

 

現在您可以在vi中開啟檔案,在其中移動和退出,現在我們將學習如何編輯檔案中的文字。

修改文字

需要插入、刪除或修改文字時,使用以下命令。注意,有些命令有類似於小寫形式的大寫形式,具體見下文的描述。

 

 

 

搜尋文字

 

  1. i 在當前位置的字元之前進入插入模式。鍵入文字並按 Esc 返回命令模式。
    使用 I 在當前行的前面插入。   
  2. a 在當前位置的字元之後插入模型。鍵入文字並按 Esc 返回到命令模式。
    使用 A 插入當前行的結尾。   
  3. c 使用 c 更改當前字元並進入插入模式鍵入替換字元。   
  4. o 在當前行下方另起一行以插入文字。使用 0 開啟當前行上面的一行。   
  5. cw 刪除當前字的其餘部分,進入插入模式進行替換。使用重複計數替換多個字。
    使用 c$ 替換行的末尾。   
  6. dw 與上述 cw(和 c$)類似,但不進入插入模式。   
  7. dd 刪除當前行。使用重複計數刪除多行。   
  8. x 刪除游標位置的字元。使用重複計數刪除多個字元。   
  9. p 將最後一個刪除文字放在當前字元。使用 P 將其放在當前字元之前。   
  10. xp 組合 x 和 p 是一個常用的方法。這將交換游標位置的字元和它右邊的字元。可以使用表示式在檔案中/

搜尋文字:

使用 / 後跟正規表示式可以在檔案中進行向前搜尋。

 

 

 

 

  1. ? 使用 ? 後跟正規表示式可以在檔案中進行向後搜尋。   
  2. n 使用 n 以任意方向重複上一次搜尋。  

上述搜尋命令前可以帶任何數字表示重複次數。3/x 查詢當前點第三次出現 x 的地方,就像是 /x 後跟 2n。類似地,2/^e 將從當前位置開始的第二行查詢以 e 開始的內容。

 

注意,到達檔案底部之後,搜尋將回到頂部。

獲得幫助

vi 中另一個有用的命令是 help 命令,呼叫它的方式是 :help。help 將在vi中開啟;使用 :q 命令可以離開幫助回到工作。如果您希望在某個特定主題獲得幫助,比如換行,可以嘗試在 :help 命令後面新增一個字,例如::help wrap。

小結

我們從向 count1.sh 檔案新增一行開始。 要保持原來的內容並儲存修改的版本,如 count2.sh,使用vi開啟檔案之後,我們應該使用這些vi命令。注意, 表示按 Esc 鍵。

 

清單 3. 向 count1.sh 新增一行的編輯器命令

 

 

 

 

 

 

  1. 1G  
  2. O  
  3. sleep 20<Esc>   
  4. :w! count2.sh   
  5. :q 

這些命令執行以下操作:

 

 

 

  1. 1G 移動到檔案的第一行   
  2. O 在上方新建一行並進入插入模式   
  3. sleep 20 要新增的新文字   
  4. <Esc> 按 Esc 鍵返回命令模式   
  5. :w! count2.sh 將檔案寫入磁碟   
  6. :q 關閉 vi  

只要知道如何做,vi編輯器的使用一切都很簡單。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9390331/viewspace-688114/,如需轉載,請註明出處,否則將追究法律責任。

相關文章