Linux vi 指令整理 | Vim 3 種模式與視覺模式

打開 vi 卻輸入不了文字,或不知道怎麼離開而直接關掉視窗,這是第一次接觸伺服器的人都會經歷一次的事。 Linux vi 指令分成一般模式與插入模式,只要知道自己現在處於哪個模式,接下來按幾個鍵就能搞定。本文用表格整理了三種模式與各模式的指令,也讓你能在瀏覽器中的虛擬伺服器上親手輸入 vi。
在 AlmaLinux 9.8 中,vi 與 vim 都來自 vim 8.2 套件,本文的畫面與訊息都是用 vim 開啟的。如果尚未安裝,請用 [dnf -y install vim-enhanced] 安裝。
✅ vi 的三種模式
vi 會依模式不同,讓同一個按鍵做不同的事。開啟檔案時會從一般模式開始,按 i 進入插入模式輸入文字,按 Esc 返回,再用冒號 [:] 進入末行模式,儲存並離開。
| 模式 | 進入按鍵 | 作用 |
|---|---|---|
| 一般模式(Normal mode) | 開啟 vi 時就是這個模式 · 在其他模式按 Esc | 移動游標、刪除、複製、貼上、復原 |
| 插入模式(Insert mode) | i a I A o O | 輸入文字。畫面下方會顯示 [-- INSERT --] |
| 末行模式(Last-line mode) | : | 儲存、離開、取代、設定行號。畫面下方會出現 : |
| 視覺模式(Visual mode) | v V Ctrl-v | 選取範圍後刪除、複製或一次輸入 |
在終端機開啟檔案的方法有三種。
| 指令 | 說明 |
|---|---|
| vi 檔名 | 開啟檔案並從一般模式開始。檔案不存在時會新建,並顯示 [New] |
| vi +20 檔名 | 開啟時把游標放在第 20 行 |
| view 檔名= vi -R | 以唯讀方式開啟。修改時會出現 [W10] 警告,儲存時會出現 [E45] |
在下方的虛擬伺服器輸入 [vi httpd.conf],就會開啟 vi,左側選單也會切換成 vi 內的指令。點選標籤,該按鍵就會輸入到畫面上,也可以直接用鍵盤輸入。
✅ Linux vi 指令整理
🔲 移動游標
| 按鍵 | 說明 |
|---|---|
| h j k l← ↓ ↑ → | 一次移動一格。也可以用方向鍵 |
| 0 · ^ | 行首(0) · 該行第一個非空白字元(^) |
| $ | 行尾 |
| w · b · e | 下一個單字開頭 · 上一個單字開頭 · 下一個單字結尾 |
| gg · G | 檔案第一行 · 最後一行 |
| 20G與 :20 相同 | 移到第 20 行。換個數字就能移到想要的行 |
| H · M · L | 畫面最上方 · 中間 · 最下方的行 |
| Ctrl-f · Ctrl-b | 往下 · 往上一個畫面 |
| Ctrl-d · Ctrl-u | 往下 · 往上半個畫面 |
🔲 進入插入模式
不論用哪個按鍵進入,輸入完畢後都要按 Esc。cw、cc、C、s 會在刪除的同時直接進入插入模式,所以修改單字或整行時,比分別按 x 和 i 更快。
| 按鍵 | 說明 |
|---|---|
| i · a | 在游標前(i) · 游標後(a)開始輸入 |
| I · A | 在行首(I) · 行尾(A)開始輸入 |
| o · O | 在下方(o) · 上方(O)新增空白行並開始輸入 |
| cw | 刪除游標到單字結尾的內容並開始輸入 |
| cc | 刪除整行並開始輸入 |
| C | 刪除游標到行尾的內容並開始輸入 |
| s | 刪除一個字元並開始輸入 |
| Esc | 結束輸入,回到一般模式 |
🔲 刪除 · 修改
在 d 後面接移動鍵,就會刪除該範圍。dw 刪除單字、dd 刪除整行、dG 刪除到檔案結尾;前面加上數字,就會重複那麼多次。
| 按鍵 | 說明 |
|---|---|
| x · X | 刪除游標所在字元(x) · 游標前一個字元(X)。3x 是三個字元 |
| dw | 刪除游標到單字結尾的內容 |
| dd | 刪除整行。3dd 是三行 |
| D= d$ | 刪除游標到行尾的內容 |
| d0 | 刪除行首到游標前的內容 |
| dG | 刪除目前這行到檔案結尾的內容 |
| :6d · :6,10d | 刪除第 6 行 · 刪除第 6~10 行 |
| J | 把下一行接到目前這行的結尾 |
| r | 把游標所在字元換成接著輸入的字元 |
| ~ | 切換大小寫 |
| >> · << | 整行增加縮排 · 減少縮排 |
🔲 複製 · 貼上 · 復原
刪除的內容也能像複製的內容一樣用 p 貼上,所以連續按 dd 和 p,就能把該行往下移。u 可以往回復原好幾個步驟,Ctrl-r 則會重做已復原的動作。
| 按鍵 | 說明 |
|---|---|
| yy | 複製整行。3yy 是三行 |
| yw | 複製游標到單字結尾的內容 |
| p · P | 把複製的內容貼到下方(p) · 上方(P)。若是以字元為單位複製,則貼到游標後 · 前 |
| :1 co 7與 :1 t 7 相同 | 複製第 1 行,貼到第 7 行下方 |
| :1,7 co 8 | 複製第 1~7 行,貼到第 8 行下方 |
| :1 m 8 | 把第 1 行移到第 8 行下方 |
| u | 復原。多按幾次就會繼續往回復原 |
| Ctrl-r | 重做已復原的動作 |
| . | 重複上一次的變更 |
🔲 搜尋 · 取代
取代要在末行模式中進行。沒有指定範圍時只會作用於目前這行,加上 [%] 就是整個檔案;結尾沒有 g 的話,每行只會取代第一個符合的字串。
| 按鍵 | 說明 |
|---|---|
| /字串 | 從游標往下搜尋。到達結尾時會從開頭繼續:[search hit BOTTOM, continuing at TOP] |
| ?字串 | 從游標往上搜尋 |
| n · N | 同方向的下一個結果(n) · 反方向(N) |
| * | 往下搜尋游標所在的單字 |
| :s/old/new/ | 把目前這行的第一個 old 換成 new |
| :s/old/new/g | 把目前這行所有的 old 換成 new |
| :%s/old/new/g | 把整個檔案所有的 old 換成 new |
| :10,20s/old/new/g | 把第 10~20 行所有的 old 換成 new |
| :%s/old/new/gc | 逐一詢問後再取代(y 取代 · n 略過 · a 全部 · q 結束) |
🔲 儲存 · 離開 · 行號
| 按鍵 | 說明 |
|---|---|
| :w | 儲存。完成後會顯示 [36L, 1094B written] |
| :w 檔名 | 另存新檔。原本的檔案維持不變 |
| :wq= :x = ZZ | 儲存並離開 |
| :q | 離開。如果有修改過,會出現 [E37: No write since last change] |
| :q! | 不儲存直接離開 |
| :set nu · :set nonu | 顯示 · 隱藏行號 |
✅ 用 Vim 視覺區塊模式一次註解多行
要在多行開頭加入相同的文字時,不必每行都按 i,改用視覺區塊模式即可。在一般模式中,v 以字元為單位、Shift-v 以行為單位、Ctrl-v 以欄為單位選取範圍。
以下是把設定檔中一整段內容一次註解掉的步驟。把游標放在第一行的第一個字元,按 Ctrl-v,再用 j 往下選取各行,接著按 I、輸入 #,最後按 Esc。



要取消註解時也一樣。在第一行的 # 上用 Ctrl-v 往下選取,再按 x,選取的欄就會一次刪除。可以直接在上方模擬器的 vhost.conf 中試試看。
ℹ️ 聯盟行銷說明
本站內容包含聯盟行銷連結。訪客透過這些連結購買商品或服務時,本站會從賣家獲得佣金。在這個過程中,購買者支付的金額(遇到活動折扣時金額會降低↓)並不會因此提高。刊登的價格、折扣與庫存資訊以撰寫當時為準,可能與實際情況不同,購買前請向賣家做最後確認。商品的挑選與評價依本站自訂的標準撰寫,是否支付佣金不會影響介紹順序或評價內容。