Logo
Published on

Vim 選取模式:三種 Visual Mode

Vim 系列文章

  1. Vim 生存指南:模式與移動
  2. Vim 編輯基礎:輸入、刪除和複製貼上
  3. Vim 選取模式:三種 Visual Mode (本篇)
  4. Vim 語法系統:動詞 + 量詞 + 名詞
  5. Vim 搜尋技巧:快速定位與取代
  6. Vim 效率倍增:重複與自動化
  7. Vim 客製化:設定與 IDE 整合

前兩篇我們學會了移動和編輯,例如 dd 刪除一行、yy 複製一行。但有時候你會想「先看到選取範圍,再決定要做什麼」

這就是 Visual Mode 的用途

為什麼需要 Visual Mode?

前面學的操作像 dd 刪除整行、D 刪除到行尾,都是「盲操作」——你按下去,Vim 就執行,但在按下之前你看不到會影響哪些內容

Visual Mode 讓你可以

  1. 先選取,確認範圍正確
  2. 再操作,執行刪除/複製/修改

對於不確定範圍的操作,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             → 選取 34. $              → 擴展到每行的行尾
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             → 選取 34. 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可以先看到選取
需要多行編輯VCtrl+v直覺好操作
矩形區域Ctrl+v這是唯一的方式
確定要操作的範圍直接操作更快,如 ddD

經驗法則:不確定時用 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 產生