- Published on
Vim 選取模式:三種 Visual Mode

Vim 系列文章
- Vim 生存指南:模式與移動
- Vim 編輯基礎:輸入、刪除和複製貼上
- Vim 選取模式:三種 Visual Mode (本篇)
- Vim 語法系統:動詞 + 量詞 + 名詞
- Vim 搜尋技巧:快速定位與取代
- Vim 效率倍增:重複與自動化
- Vim 客製化:設定與 IDE 整合
前兩篇我們學會了移動和編輯,例如 dd 刪除一行、yy 複製一行。但有時候你會想「先看到選取範圍,再決定要做什麼」
這就是 Visual Mode 的用途
為什麼需要 Visual Mode?
前面學的操作像 dd 刪除整行、D 刪除到行尾,都是「盲操作」——你按下去,Vim 就執行,但在按下之前你看不到會影響哪些內容
Visual Mode 讓你可以
- 先選取,確認範圍正確
- 再操作,執行刪除/複製/修改
對於不確定範圍的操作,Visual Mode 更安全
三種 Visual Mode
| 按鍵 | 模式 | 選取方式 | 使用場景 |
|---|---|---|---|
v | 字元模式 | 一個字元一個字元 | 選取部分文字 |
V | 行模式 | 一整行一整行 | 選取多行程式碼 |
Ctrl+v | 區塊模式 | 矩形區域 | 多行同時編輯 |
共同操作
進入任何 Visual Mode 後
- 按
Esc或再按一次同樣的鍵 → 離開 Visual Mode
v:字元選取模式
基本操作
hello world test
^ ← 游標在 w 上
按 v
hello [w]orld test
^^^ ← 進入 Visual Mode,w 被選取
移動游標(用任何移動指令)
hello [world te]st
^^^^^^^^^^ ← 選取範圍跟著擴展
搭配移動指令
進入 v 後,可以用任何移動指令擴展選取
| 按鍵 | 效果 |
|---|---|
w | 選取到下一個 word 開頭 |
e | 選取到 word 結尾 |
$ | 選取到行尾 |
} | 選取到段落結尾 |
gg | 選取到檔案開頭 |
G | 選取到檔案結尾 |
實用技巧:重新選取
gv → 重新選取上次的選取範圍
這在你選取完、執行操作後,想再次選取同樣範圍時很有用
V:行選取模式
基本操作
line 1
line 2 ← 游標在這
line 3
按 V
line 1
[line 2] ← 整行被選取(不管游標在哪個位置)
line 3
按 j
line 1
[line 2]
[line 3] ← 選取擴展到下一行
特點
- 不管游標在行中的哪個位置,都會選取整行
- 上下移動會以行為單位擴展選取
- 非常適合操作多行程式碼
常見用法
Vjjd → 選取 3 行並刪除
Vjj> → 選取 3 行並增加縮排
Vjjy → 選取 3 行並複製
VG → 從當前行選取到檔案結尾
Vgg → 從當前行選取到檔案開頭
Ctrl+v:區塊選取模式(矩形選取)
區塊模式可以選取矩形區域,這在其他編輯器很少見
基本操作
line 1: hello
line 2: hello
line 3: hello
line 4: hello
^
按 Ctrl+v
[l]ine 1: hello
^ ← 進入區塊模式,選取一個字元
按 3j(往下 3 行)
[l]ine 1: hello
[l]ine 2: hello
[l]ine 3: hello
[l]ine 4: hello
↑ 選取了一個垂直的區塊
按 5l(往右 5 格)
[line 1]: hello
[line 2]: hello
[line 3]: hello
[line 4]: hello
↑↑↑↑↑↑ 選取了一個矩形區塊
區塊模式的特殊操作
| 按鍵 | 效果 |
|---|---|
I | 在選取區塊的左側插入(每行都會插入) |
A | 在選取區塊的右側插入(每行都會插入) |
c | 刪除選取區塊並進入插入模式 |
r{char} | 把選取區塊全部替換成某個字元 |
d | 刪除選取區塊 |
y | 複製選取區塊 |
區塊選取實戰範例
範例 1:多行加前綴
目標:在每行前面加上 -
apple
banana
cherry
步驟:
1. 游標移到第一行開頭
2. Ctrl+v → 進入區塊模式
3. 2j → 選取 3 行的第一格
4. I → 進入插入模式(左側)
5. 輸入 "- "
6. Esc → 完成!所有行都會加上前綴
結果:
- apple
- banana
- cherry
範例 2:多行加後綴
目標:在每行後面加上 ,
"apple"
"banana"
"cherry"
步驟:
1. 游標移到第一行
2. Ctrl+v → 進入區塊模式
3. 2j → 選取 3 行
4. $ → 擴展到每行的行尾
5. A → 進入插入模式(右側)
6. 輸入 ","
7. Esc → 完成!
結果:
"apple",
"banana",
"cherry",
範例 3:刪除多行的特定欄位
目標:刪除行號
1. apple
2. banana
3. cherry
步驟:
1. 游標移到 "1" 上
2. Ctrl+v → 進入區塊模式
3. 2j → 往下選取
4. 2l → 往右選取(選到 ". ")
5. d → 刪除
結果:
apple
banana
cherry
範例 4:批次註解程式碼
目標:把多行程式碼註解掉
console.log('a')
console.log('b')
console.log('c')
步驟:
1. 游標移到第一行開頭
2. Ctrl+v → 進入區塊模式
3. 2j → 選取 3 行
4. I → 插入模式
5. 輸入 "// "
6. Esc → 完成!
結果:
// console.log("a");
// console.log("b");
// console.log("c");
Visual Mode 選取後的操作
選取完成後,可以執行以下操作
基本操作
| 按鍵 | 效果 |
|---|---|
d | 刪除選取內容 |
y | 複製選取內容 |
c | 刪除選取內容並進入 Insert Mode |
p | 用寄存器內容取代選取內容 |
x | 刪除選取內容(同 d) |
縮排
| 按鍵 | 效果 |
|---|---|
> | 增加縮排 |
< | 減少縮排 |
= | 自動縮排 |
大小寫轉換
| 按鍵 | 效果 |
|---|---|
u | 轉小寫 |
U | 轉大寫 |
~ | 大小寫互換 |
選取 "Hello World"
按 u → "hello world"
按 U → "HELLO WORLD"
按 ~ → "hELLO wORLD"
貼上取代的陷阱
在 Visual Mode 中用 p 貼上會取代選取的內容,但有個容易踩到的坑
1. yiw 複製 "hello"
2. 移到另一個地方,viw 選取 "world"
3. 按 p,"world" 被取代成 "hello" ✓
4. 再按 p,結果貼出來的是 "world"!
為什麼? 因為 Visual Mode 的 p 會把被取代的文字存入預設寄存器,覆蓋掉原本複製的內容
解法可以參考前一篇「連續貼上的陷阱」
Visual Mode 進階技巧
技巧 1:快速選取到配對符號
if (condition && (nested || value))
^
v% → 選取到配對的 )
% 會跳到配對的括號,所以 v% 可以選取整個括號內容
技巧 2:選取整個檔案
ggVG → 從頭到尾全選
技巧 3:在 Visual Mode 中切換模式
按 v 進入字元模式後
按 V → 切換到行模式
按 Ctrl+v → 切換到區塊模式
什麼時候用 Visual Mode?
| 場景 | 建議方式 | 原因 |
|---|---|---|
| 不確定範圍 | Visual Mode | 可以先看到選取 |
| 需要多行編輯 | V 或 Ctrl+v | 直覺好操作 |
| 矩形區域 | Ctrl+v | 這是唯一的方式 |
| 確定要操作的範圍 | 直接操作 | 更快,如 dd、D |
經驗法則:不確定時用 Visual Mode 更安全,多行或區塊編輯一定用 Visual Mode
本篇重點整理
三種 Visual Mode
v → 字元選取
V → 行選取
Ctrl+v → 區塊選取(矩形)
共同操作
Esc → 離開
o → 跳到另一端
gv → 重新選取上次範圍
選取後操作
d → 刪除
y → 複製
c → 修改
>/< → 縮排
u/U/~ → 大小寫
區塊模式特殊操作
I → 在左側插入(多行)
A → 在右側插入(多行)
c → 修改區塊
r → 替換成某字元
實用組合
ggVG → 全選
v% → 選取到配對括號
V2j> → 選取 3 行並縮排
圖片來源:AI 產生