
vim 分為三種模式的作用分別是:
| 一般指令模式 (command mode) | 以 vi 打開一個檔案就直接進入一般指令模式了(這是預設的模式,也簡稱為一般模式)。 |
| 編輯模式 (insert mode) | 在一般指令模式中可以進行刪除、複製、貼上等等的動作。當你按下『i, I, o, O, a, A, r, R』等任何一個字母之後才會進入編輯模式。要回到一般指令模式, 要按下『Esc』按鍵退回 一般指令模式。 |
| 指令列命令模式 (command-line mode) | 在一般模式當中,輸入『 : / ? 』三個中的任何一個按鈕,就可以將游標移動到最底下那一列。 |
一般指令模式可用的按鍵
| h 或 向左方向鍵(←) | 游標向左移動一個字元 |
| j 或 向下方向鍵(↓) | 游標向下移動一個字元 |
| k 或 向上方向鍵(↑) | 游標向上移動一個字元 |
| l 或 向右方向鍵(→) | 游標向右移動一個字元 |
| [Ctrl] + [f] | 螢幕『向下』移動一頁,相當於 [Page Down]按鍵 |
| [Ctrl] + [b] | 螢幕『向上』移動一頁,相當於 [Page Up] 按鍵 |
| [Ctrl] + [d] | 螢幕『向下』移動半頁 |
| [Ctrl] + [u] | 螢幕『向上』移動半頁 |
| + | 游標移動到非空白字元的下一列 |
| – | 游標移動到非空白字元的上一列 |
| n<space> | 那個 n 表示『數字』,按下數字後再按空白鍵,游標會向右移動這一列的 n 個字元。 |
| 0 或功能鍵[Home] | 移動到這一列的最前面字元處 |
| $ 或功能鍵[End] | 移動到這一列的最後面字元處 |
| H | 游標移動到這個螢幕的最上方那一列的第一個字元 |
| M | 游標移動到這個螢幕的中央那一列的第一個字元 |
| L | 游標移動到這個螢幕的最下方那一列的第一個字元 |
| G | 移動到這個檔案的最後一列 |
| nG | n 為數字。移動到這個檔案的第 n 列 |
| gg | 移動到這個檔案的第一列 |
| n<Enter> | n 為數字。游標向下移動 n 列 |
| /word | 向游標之下尋找一個名稱為 word 的字串 |
| ?word | 向游標之上尋找一個字串名稱為 word 的字串 |
| n | 這個 n 是英文按鍵。代表『重複前一個搜尋的動作』 |
| N | 這個 N 是英文按鍵。與 n 剛好相反,為『反向』進行前一個搜尋動作。 |
| :n1,n2s/word1/word2/g | n1 與 n2 為數字。在第 n1 與 n2 列之間尋找 word1 這個字串,並將該字串取代為 word2 |
| :1,$s/word1/word2/g | 從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 |
| :1,$s/word1/word2/gc | 從第一列到最後一列尋找 word1 字串,並將該字串取代為 word2 。且在取代前顯示提示字元給使用者確認 (confirm) 是否需要取代 |
| x, X | x 為向後刪除一個字元 (相當於 [del] 按鍵), X 為向前刪除一個字元(相當於 [backspace] 亦即是倒退鍵) |
| nx | n 為數字,連續向後刪除 n 個字元 |
| dd | 刪除游標所在的那一整列 |
| ndd | n 為數字。刪除游標所在的向下 n 列 |
| d1G | 刪除游標所在到第一列的所有資料 |
| dG | 刪除游標所在到最後一列的所有資料 |
| d$ | 刪除游標所在處,到該列的最後一個字元 |
| d0 | 刪除游標所在處,到該列的最前面一個字元 |
| yy | 複製游標所在的那一列 |
| nyy | n 為數字。複製游標所在的向下 n 列 |
| y1G | 複製游標所在列到第一列的所有資料 |
| yG | 複製游標所在列到最後一列的所有資料 |
| y0 | 複製游標所在的那個字元到該列行首的所有資料 |
| y$ | 複製游標所在的那個字元到該列行尾的所有資料 |
| p, P | p 為將已複製的資料在游標下一列貼上,P 則為貼在游標上一列! |
| J | 將游標所在列與下一列的資料結合成同一列 |
| c | 重複刪除多個資料 |
| u | 復原前一個動作 |
| [Ctrl]+r | 重做上一個動作 |
| . | 重複前一個動作 |
編輯模式可用的按鍵
| i, I | 進入插入模式(Insert mode): i 為『從目前游標所在處插入』, I 為『在目前所在列的第一個非空白字元處開始插入』 |
| a, A | 進入插入模式(Insert mode): a 為『從目前游標所在的下一個字元處開始插入』, A 為『從游標所在列的最後一個字元處開始插入』 |
| o, O | 進入插入模式(Insert mode): 這是英文字母 o 的大小寫。o 為『在目前游標所在的下一列處插入新的一列』; O 為在目前游標所在處的上一列插入新的一列 |
| r, R | 進入取代模式(Replace mode): r 只會取代游標所在的那一個字元一次;R會一直取代游標所在的文字,直到按下 ESC 為止; |
| [Esc] | 回到一般指令模式 |
指令列模式可用的按鍵
| :w | 將編輯的資料寫入硬碟檔案中 |
| :w! | 若檔案屬性為『唯讀』時,強制寫入該檔案。不過,到底能不能寫入, 還是跟你對該檔案的檔案權限有關啊! |
| :q | 離開 vi |
| :q! | 若曾修改過檔案,又不想儲存,使用 ! 為強制離開不儲存檔案。 |
| :wq | 儲存後離開,若為 :wq! 則為強制儲存後離開 |
| :w [filename] | 將編輯的資料儲存成另一個檔案(類似另存新檔) |
參考資料