從菜鳥到專家 vi編輯器全程教學手冊
我們曾經在linux vi編輯器概念層層講解中告訴大家一些基本的操作命令。但是我們在使用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
- mkdir -p lpi103-8 && cd lpi103-8 && {
- echo 'x="$1"'>count1.sh
- echo 'echo "$2" $(date)'>>count1.sh
- echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh
- echo 'echo "$2" $(date)'>>count1.sh
- }
要編輯現有文件,可以使用vi命令并將文件名作為參數。參考 參考資料 中的手冊了解更多主題的詳情。現在,只需要使用不帶參數的命令:
vi count1.sh
該命令將打開 count1.sh 文件。您應該看到類似于清單 2 的內容。如果您使用的是vim,一些字或字母可能有顏色。Vim 有一個語法高亮模型(它不是原始vi編輯器的一部分),默認情況下,在您的系統中它應該是打開的。
清單 2. 使用vi編輯 count1.sh
- x="$1"
- echo "$2" $(date)
- while [ $x -gt 0 ]; do x=$(( x-1 ));done
- echo "$2" $(date)
- ~
- ~
- ~
- ~
- "count1.sh" 4L, 84C 1,1 All
開發vi編輯器時并非所有終端鍵盤都有光標移動鍵,因此您在vi中只能使用標準鍵盤中能找到的鍵,以及 Esc 和 Insert 等鍵。但是,您可以配置vi使用其他鍵(如果可用);鍵盤上的大部分鍵在vi中都能做一些很有用的事情。因為這種遺留情況以及早期終端連接較慢的本質,vi 自然有了命令簡單和神秘的名聲。我們先來查看用于在文件中導航的鍵。
移動
以下命令可以幫助您在文件內移動:
- h 在當前行往左移動一個字符
- j 向下移動到下一行
- k 向上移動到上一行
- l 在當前行往右移動一個字符
- w 移動到當前行下一個字
- e 移動到當前行下一個字的結束處
- b 移動到當前行上一個字的開始處
- Ctrl-f 向前滾動一頁
- Ctrl-b 向后滾動一頁
如果在這些命令之前鍵入數字,則命令將執行該數字表示的次數。該數字稱為重復次數 或者就稱為計數。例如,5h 將向左移動 5 個字符。許多vi命令都可以使用重復計數。#p#
移動到行
以下命令將幫助您移動到文件的特定行:
- G 移動到文件的特定行。例如,3G 移動到第 3 行。如果沒有參數,
G 將移動到文件的最后一行。 - H 相對于屏幕移動到最上面的行。例如,3H 將移動到屏幕上方往下第三行。
- L 就像 H 一樣,不同之處在于移動到屏幕的最后一行。因此,
2L 移動到屏幕的倒數第二行。 - 離開 vi 關于一個新的編輯器,就有用的一件事情是了解如何在做了不該
做的事情前離開編輯器,比如要避免銷毀重要的配置文件。您可以在保存
或丟棄更改的情況下離開 vi,也可以用重新啟動的方式。如果這些命令無效,
您可能處于插入模式,這將在后文介紹。如果是這樣,可以按 Esc
退出插入模式并返回到命令模式,這些命令就會生效。 - :q! 退出編輯文件并放棄所有更改。這是避免麻煩的常用手段。
- :w! 寫入文件(無論是否修改)。嘗試重寫現有文件或只讀文件,
或者其他不可寫文件。您可以給定一個文件名作為參數,寫入的將是這個
文件而不是開始的文件。忽略 ! 通常會更加安全,除非您知道您在做什么。 - ZZ 如果修改了文件,則寫入文件。是普通 vi 退出常用的方法。
- :e! 編輯文件的當前磁盤副本。這將重載文件,放棄所做的更改。
如果磁盤副本出于某些原因發生了更改,并且您需要最新的版本,那么可以使用這種方法。 - :! 運行一個 shell 命令。鍵入命令并按 Enter。當命令完成時,
您將看到輸出和提示返回到 vi 編輯。注意:
當您鍵入冒號 (:) 時,您的光標將移動到鍵入命令和任何參數的屏幕的下一行。
如果忽略上述命令的感嘆號,您將收到一條錯誤消息,比如更改沒有保存,輸出文件無法重寫(例如,編輯只讀文件時)。
: 命令有一個較長的形式(:quit, :write, :edit),但是很少使用。
vi 模式
vi 編輯器有兩種操作模式:
命令模式
在命令模式中,您可以在文件中移動并執行一些編輯操作,比如搜索文本、刪除文本等。啟動時通常都是命令模式。
插入模式
在插入模式中,您在插入點向文本鍵入新文本。要返回到命令模式,按 Esc(Escape)鍵。
這兩個模式決定了編輯器的行為。您在插入模式中鍵入的任何內容都將視為將要插入文件的文本。如果嘗試鍵入命令但沒有反應,或者在光標下出現字符,那么可能是忘記按 Esc 退出插入模式了。
編輯文本
現在您可以在vi中打開文件,在其中移動和退出,現在我們將學習如何編輯文件中的文本。
修改文本
需要插入、刪除或修改文本時,使用以下命令。注意,有些命令有類似于小寫形式的大寫形式,具體見下文的描述。
搜索文本
- i 在當前位置的字符之前進入插入模式。鍵入文本并按 Esc 返回命令模式。
使用 I 在當前行的前面插入。 - a 在當前位置的字符之后插入模型。鍵入文本并按 Esc 返回到命令模式。
使用 A 插入當前行的結尾。 - c 使用 c 更改當前字符并進入插入模式鍵入替換字符。
- o 在當前行下方另起一行以插入文本。使用 0 打開當前行上面的一行。
- cw 刪除當前字的其余部分,進入插入模式進行替換。使用重復計數替換多個字。
使用 c$ 替換行的末尾。 - dw 與上述 cw(和 c$)類似,但不進入插入模式。
- dd 刪除當前行。使用重復計數刪除多行。
- x 刪除光標位置的字符。使用重復計數刪除多個字符。
- p 將最后一個刪除文本放在當前字符。使用 P 將其放在當前字符之前。
- xp 組合 x 和 p 是一個常用的方法。這將交換光標位置的字符和它右邊的字符。可以使用表達式在文件中/
搜索文本:
使用 / 后跟正則表達式可以在文件中進行向前搜索。
- ? 使用 ? 后跟正則表達式可以在文件中進行向后搜索。
- 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> 表示按 Esc 鍵。
清單 3. 向 count1.sh 添加一行的編輯器命令
- 1G
- O
- sleep 20<Esc>
- :w! count2.sh
- :q
這些命令執行以下操作:
- 1G 移動到文件的第一行
- O 在上方新建一行并進入插入模式
- sleep 20 要添加的新文本
- <Esc> 按 Esc 鍵返回命令模式
- :w! count2.sh 將文件寫入磁盤
- :q 關閉 vi
只要知道如何做,vi編輯器的使用一切都很簡單。
【編輯推薦】