vi:
vi 有三種狀態,分別是命令模式 ( Command mode )、插入模式 ( Insert mode )、和底線模式 ( Last line )。各模式的功能區分如下:- Command mode:此模式在於控制游標移動、刪除字元或搬移某個區塊。
- Insert mode:只有在此模式下,才可以輸入文字。
- Last line mode:此模式在於儲存檔案、離開 vi、找尋字串、列出行號和求助等等。
你可以鍵入 vi <filename>或 v i來進入 vi 編輯器。不同的是 vi <filename> 會以 filename 做為文件的預設檔名。如果 filename 存在時,則直接編輯此檔。而直接鍵入 vi 時則不會預設文件檔的檔名,也不會開啟已存在的檔案。一開始進入 vi 時是在 Command mode 下。你可以從 Command mode 轉為 Insert mode,或從 Command mode 轉為 Last line mode。注意,要開始輸入文字一定要進入 Insert mode。以下說明如何在各種模式中轉換。
- Command mode -> Insert mode:
在 Command mode 下按 i、a 或 o 都可以進入 Insert mode,並且可以開始輸入字元資料。這三種輸入文字的方式不太一樣: - i :插入,從目前游標所在之處插入所輸入之文字。
- a :增加,從目前游標所在的下一個字開始輸入文字。
- o :插入新的一行,並從行首開始輸入文字。
- Insert mode -> Command mode:
只要在 Insert mode 下按 [ESC] 即可回 Command mode。 - Command mode -> Last line mode:
當在 Command mode 下按 : 、 / 或 ? 都可進入 Last line mode。這時你所鍵入的指令都會出現在最下面一行。這三種進入方式分別代表三種功能:
- ::按 : 後,你可以接著鍵一些特殊的指令如存檔、離開...等等。
- /:鍵入 / 以後,你可以輸入你所要找尋的字串。vi 會從文件開頭往上往下找尋符合的字串
- ?:鍵入 ? 以後,你可以輸入你所要找尋的字串。vi 會從文件尾端由下往上找尋符合的字串
- :e filename:編輯另一個檔 filename,如果放棄當前改變,使用 ! 強制
- :% s/string1/string2/g 在整個文章範圍內尋找 string1,用 string2 取代
前面我們提到過,當你啟動vi以後,會在 Command mode 下。如果你要鍵入文字時,你必須轉到 Insert mode。這時若你又想刪除文字,你會發現按倒退鍵居然沒有作用。原來 vi 必須轉換到 Command mode 下刪除文字。等你文件打完想存檔的時候,你又會發現在 Command mode 下居然沒有存檔的指令。原來存檔的指令是在 Last line mode 下。所以底下我們將介紹 Command mode 和 Last line mode 下幾個比較常用的功能:
Command mode:
- 移動游標:
- 除了上、下、左、右鍵可以移動游標外,小寫英文字母 h、j、k、l 也可以用來移動游標。h、j、k、l 分別代表 左、下、上、右。
- 按 [ctrl + b]:螢幕往後移動一頁。
- 按 [ctrl + f ]:螢幕往前移動一頁。
- 按 [ctrl + u]:螢幕往後移動半頁。
- 按 [ctrl + d]:螢幕往前移動半頁。
- 按 G:移動到文章的最後一行。
- 按1G:移動到文章的第一行
- 按 w:游標移到下個 word 的開頭。
- 按 e:游標移到下個 word 的字尾。
- 按 b:游標回到上個 word 的開頭。
- 按 0:游標移動到所在行的開頭
- 按 $:游標移到所在行的最後一個字元。
- 按 ^:移到該行第一個非空白字元。
- 按 n:重複上次搜尋動作。
- 按 #|:移到該行的第 # 個字元,# 為一個數字。如 5| 表示移動游標到第五個字元。
- 刪除文字:
- x :每按一次就刪除游標所在位置的後面一個字元。
- #x :刪除游標所在位置的後面 # 個字元,如 6x。
- X :每按一次就刪除游標所在位置的前面一個字元。
- #X :刪除游標所在位置的前面 # 個字元,如 20X。
- dd :刪除一整行,此行位於游標所在位置。
- #dd:往下刪除 # 行文字。
- 複製
- yw :將游標所在之處到字尾的字元複製到緩衝區中。
- yy :複製游標所在之行。
- #yy:拷貝目前游標往下數 # 行的文字。
- p :將緩衝區內的字元貼到游標所在位置。
- 取代
- r :取代游標所在處之字元。
- R:取代字元直到按 [ESC] 為止。
- 復原上一個指令
- u:若你不小心操作錯誤,可以按 u 來回復資料。
- 更改
- cw:更改游標所在處的字到字尾 $ 處。
- c#w:如 c3w 代表更改三個字。
- 跳至指定之行
- [ctrl+g]:列出游標所在之行的行號。
- #G:跳至第 # 行。
Last line mode:
進入 Last line mode 之前,一定要先進入 Command mode 才行。然後按 :、/、? 都可以進入 Last line mode。前面已經講過按 / 和 ? 都是在做搜尋字串之用,所以我們現在只介紹按 : 後所能輸入的功能。記得輸入這些命令之前一定要在 Command mode 下按 :。
- 列出行號
- set nu:鍵入這個命令以後會在文章的每一行前面列出行號。
- 跳到文章的某一行
- #:井號代表一個數字。比如你輸入 15 並按 Enter 以後,游標就會跳到第 15 行。
- 存檔
- w:若你已經有預設文件檔的檔名,則下這個指令可以將你編輯過的檔案存起來。
- w filename:下這個指令可以把你編輯過的文件存在 <filename> 這個檔案之中。
- #,# w filename:# 是指數字,如 20,30 w test.txt。這個意思是說把 20 行到 30 行的資料存到 test.txt 檔案中。
- 離開
- q:離開 vi
- q!:強制離開 vi。有時候按 q 不能離開 vi 的話就可以鍵入這個指令強制離開。
- wq:存檔並離開。
- x :存檔並離開,相當於:wq
- 求助
- help:vi 的指令真的是又多又繁雜,所以要背住所有的指令簡直是不可能的事。所以如果你想查詢某個指令的功能時,鍵入 help 就可以達到這個功能。這是鍵入 help 以後所出現的畫面。請看下面那幾行。第一行是說如果你要查詢 vi 的命令,請鍵入 :viusage。所以你只好再乖乖鍵入一次指令,它就會出現 vi 命令的列表了。第二行說明如果要看 ex 命令的話,請鍵入 :exusage。