Ubuntu 終端機命令列畫面特寫,游標停在 sudo 指令後方

← INSIGHTS & PERSPECTIVES | DevOps

vi 編輯器入門教學:三種模式與常用指令完整整理

在 Linux 伺服器上管理設定檔,vi 是一定要會的文字編輯器。這篇整理 vi 的三種操作模式(一般模式、編輯模式、指令列命令模式)與常用按鍵,包含游標移動、搜尋取代、複製、複製貼上、儲存離開等,幫你快速上手 vi 基本操作。

要透過 SSH 遠端管理 Linux 伺服器,編輯設定檔是每天的日常,而伺服器上幾乎一定內建、也最常見的文字編輯器就是 vi。這篇整理我當初學 vi 時記下的重點:三種操作模式的差別,以及一般模式、編輯模式、指令列命令模式各自的常用按鍵,讓你不用每次都搜尋「vi 怎麼存檔離開」。

為什麼管理 Linux 伺服器一定要會 vi?

若要使用 Linux 來管理伺服器,文書處理是很重要的,因此會需要了解如何操作 Linux 裡的文字編輯軟體 vi。呼叫 vi 的方式很簡單,在終端機輸入 `vi 檔名` 即可,例如:

```bash

vi /etc/hosts

```

在終端機輸入 vi 檔名來開啟檔案

vi 的三種使用模式是什麼?

因為 vi 是純鍵盤操作,又要同時支援打字與下指令,所以它把操作分成三種模式:

  • 一般模式:可以使用「上下左右」按鍵移動游標,能用「刪除字元」或「刪除整行」處理檔案內容,也可以用「複製、貼上」處理文件資料。
  • 編輯模式:用來編輯檔案內容。按下 `i, I, o, O, a, A, r, R` 其中一個鍵即可進入編輯模式,畫面左下方會出現 `INSERT` 或 `REPLACE` 字樣。
  • 指令列命令模式:輸入 `:` 或 `/` 就會把游標移到最底下那一行,可進行儲存、搜尋等動作。
畫面左下方的 INSERT 代表現在正在編輯模式

上圖左下方的 `I`(INSERT)代表現在正處於編輯模式。按 `Esc` 隨時可以退回一般模式——記住「任何時候先按 Esc 就對了」,是 vi 新手最重要的保命招。

一般模式有哪些常用按鍵?

在一般模式下可以移動游標、搜尋、刪除、複製貼上:

按鍵說明
`[Ctrl] + [f]`螢幕「向前」移動一頁
`[Ctrl] + [b]`螢幕「向後」移動一頁
`/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`同上,但取代前顯示提示字元讓使用者確認
`x` / `X`向後/向前刪除一個字元
`dd`刪除游標所在的那一整列
`yy`複製游標所在的那一行,`20yy` 則是複製 20 列
`p` / `P`在游標下一行/上一行貼上複製的資料
`u`復原前一個動作

編輯模式怎麼進入與離開?

從一般模式按下以下任一個鍵即可進入編輯模式:

  • `i, I`(插入):在目前游標所在處插入輸入的文字,已存在的文字會向後退。
  • `a, A`(增加):從目前游標所在的下一個字開始輸入,已存在的文字會向後退。
  • `o, O`(插入新的一行):從游標所在的下一行行首開始輸入文字。
  • `r, R`(取代):`r` 會取代游標所在的那一個字元;`R` 會一直取代游標所在的文字,直到按下 `Esc` 為止。
  • `Esc`:退出編輯模式,回到一般模式。

指令列命令模式怎麼存檔與離開?

輸入 `:` 進入指令列命令模式,常用的存檔、離開與其他指令如下:

指令說明
`:w`將編輯的資料寫入硬碟檔案中
`:q`離開 vi
`:wq`儲存後離開;`:wq!` 為強制儲存後離開
`:e!`將檔案還原到最原始的狀態
`ZZ`檔案沒有更動則不儲存離開;有更動則儲存後離開
`:w [filename]`將編輯的資料另存成另一個檔案
`:r [filename]`讀入另一個檔案的內容,加到游標所在行後面
`:set nu`顯示行號;`:set nonu` 則取消行號
`n1,n2 w [filename]`將第 n1 到 n2 行的內容儲存成 filename
`:! command`暫時離開 vi 到指令列執行 command,例如 `:! ls /home`

指令後面加上 `!` 就代表強制執行。

延伸閱讀

常見問題

Qvi 跟 vim 有什麼差別?

vim 是 vi 的加強版,相容 vi 的所有操作並新增語法高亮、多重復原等功能。在多數 Linux 發行版上輸入 `vi` 實際啟動的往往就是 vim,這篇的操作按鍵兩者通用。

Qvi 裡怎麼搜尋並取代字串?

在指令列命令模式輸入 `:1,$s/word1/word2/g` 可以把整個檔案的 word1 取代為 word2;若把結尾改成 `gc`,每次取代前會先詢問確認,建議新手都加上 `c` 比較安全。

Qvi 沒有存檔想放棄編輯怎麼辦?

先按 `Esc` 回到一般模式,再輸入 `:q!` 強制離開不儲存;若想還原到檔案最初的狀態但繼續編輯,可以輸入 `:e!`。

Q為什麼我在 vi 裡打字出現亂碼或一直在跳?

那表示你停留在一般模式,按下的英文字母被當成指令執行了。先按 `Esc` 確認回到一般模式,再按 `i` 進入編輯模式即可正常打字。

Qvi 怎麼顯示行號?

在指令列命令模式輸入 `:set nu` 即可顯示行號,輸入 `:set nonu` 則取消。顯示行號對照錯誤訊息修改設定檔時特別有用。

參考資料

最後更新

2026-08-28(原文發布於 2019-09-20,本文保留原始筆記內容並補上 GEO 結構。)

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2019-09-20