在XNIX的世界�堙A有一個共通的文字編輯器,那就是vi。說實話,它並不是很好用,但它確實功能強大,甚至有人把它做成Win32版,可見一斑。不管如何,它是想要學好XNIX的試金石,所以必需學會它,至少也要學會看著使用說明來用吧!
vi 共分為三種模式,一種是「編輯模式」,一種是「一般模式」以及「指令列模式」。其功能如下
這三種模式的切換方式為
| 一般模式: |
移動游標 |
| h 或 向左方向鍵 |
游標向左移動一個字元 |
| j 或 向下方向鍵 |
游標向下移動一個字元 |
| k 或 向上方向鍵 |
游標向上移動一個字元 |
| l 或 向右方向鍵 |
游標向右移動一個字元 |
| [Ctrl] + [f] |
螢幕『向前』移動一頁(常用) |
| [Ctrl] + [b] |
螢幕『向後』移動一頁(常用) |
| [Ctrl] + [d] |
螢幕『向前』移動半頁 |
| [Ctrl] + [u] |
螢幕『向後』移動半頁 |
| + |
游標移動到非空白字元的下一列 |
| - |
游標移動到非空白字元的上一列 |
| n<space> |
按下數字後再按空白鍵,游標會向右移動這一行的 n 個字元。例如 20<space> 則游標會向後面移動 20 個字元距離。 |
| 0 |
這是數字『 0 』:移動到這一行的最前面字元處(常用) |
| $ |
移動到這一行的最後面字元處(常用) |
| H |
游標移動到這個螢幕的最上方那一行 |
| M |
游標移動到這個螢幕的中央那一行 |
| L |
游標移動到這個螢幕的最下方那一行 |
| G |
移動到這個檔案的最後一行(常用) |
| nG |
移動到這個檔案的第 n 行。例如 20G 則會移動到這個檔案的 20 行(可配合 :set nu) |
| n<Enter> |
游標向下移動 n 行(常用) |
| 一般模式: |
搜尋與取代 |
| /word |
向游標之後尋找一個字串名稱為 word 的字串。(常用) |
| ?word |
向游標之前尋找一個字串名稱為 word 的字串。 |
| :n1,n2s/word1/word2/g |
在第 n1 與 n2 行之間尋找 word1 這個字串,並將該字串取代為 word2 !(常用) |
| :1,$s/word1/word2/g |
從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !(常用) |
| :1,$s/word1/word2/gc |
從第一行到最後一行尋找 word1 字串,並將該字串取代為 word2 !且在取代前顯示提示字元給使用者確認(conform)是否需要取代!(常用) |
| 一般模式: |
刪除、複製與貼上 |
| x, X |
x 為向後刪除一個字元, X 為向前刪除一個字元(常用) |
| nx |
向後刪除 n 個字元 |
| dd |
刪除游標所在的那一整列(常用) |
| ndd |
刪除游標所在的向下 n 列,例如 20dd 則是刪除 20 列(常用) |
| d1G |
刪除游標所在到第一行的所有資料 |
| dG |
刪除游標所在到最後一行的所有資料 |
| yy |
複製游標所在的那一行(常用) |
| nyy |
複製游標所在的向下 n 列,例如 20yy 則是複製 20 列(常用) |
| y1G |
複製游標所在列到第一列的所有資料 |
| yG |
複製游標所在列到最後一列的所有資料 |
| p, P |
p 為複製的資料在游標下一行貼上,P 則為貼在游標上一行!(常用) |
| J |
將游標所在列與下一列的資料結合成同一列 |
| c |
重複刪除多個資料,例如向下刪除 10 行,[ 10cj ] |
| u |
復原前一個動作。(常用) |
| 進入編輯模式 |
|
| i, I |
插入:在目前的游標所在處插入輸入之文字,已存在的文字會向後退;(常用) |
| a, A |
增加:由目前游標所在的下一個字開始輸入,已存在的文字會向後退:(常用) |
| o, O |
插入新的一行:從游標所在的下一行枝行首開始輸入文字;(常用) |
| r, R |
取代:r 會取代游標所在的那一個字元;R會一直取代游標所在的文字,直到按下 ESC 為止;(常用) |
| Esc |
退出編輯模式,回到一般模式中(常用) |
| 指令列模式 |
|
| :w |
將編輯的資料寫入硬碟檔案中(常用) |
| :w! |
若檔案屬性為『唯讀』時,強制寫入該檔案 |
| :q |
離開 vi (常用) |
| :q! |
若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。 |
| :wq |
儲存後離開,若為 :wq! 則為強制儲存後離開(常用) |
| :e! |
將檔案還原到最原始的狀態! |
| ZZ |
若檔案沒有更動,則不儲存離開,若檔案已經經過更動,則儲存後離開! |
| :w [filename] |
將編輯的資料儲存成另一個檔案(類似另存新檔) |
| :r [filename] |
在編輯的資料中,讀入另一個檔案的資料。亦即將 『filename』這個檔案內容加到游標所在行後面 |
| :set nu |
顯示行號,設定之後,會在每一行的字首顯示該行的行號 |
| :set nonu |
與 set nu 相反,為取消行號! |
| n1,n2 w [filename] |
將 n1 到 n2 的內容儲存成 filename 這個檔案。 |
| :! command |
暫時離開 vi 到指令列模式下執行 command 的顯示結果!例如[ :! ls /home ] |