Vim 的可视模式怎么用?字符、行、块选择与列编辑实战
为什么你总在 Vim 里手忙脚乱地选中文字
很多人用 Vim 编辑文本时,还在靠 v 一个字符一个字符地挪,遇到多行操作就切回鼠标。问题不在你,在于你没把可视模式的三个子模式用熟。Vim 的可视模式本质上是一种"先选中,再操作"的工作流——你告诉 Vim "我要处理这段文字",然后下一条命令只作用于选区。理解了这一点,后面的操作都顺理成章。
三种可视模式,三种选中粒度
Vim 提供了三种可视模式,对应三种选择粒度:
- 字符可视模式(
v):逐字符选择,适合精确选中一行内的一小段文字。 - 行可视模式(
V):逐行选择,整行为单位,适合批量操作连续多行。 - 块可视模式(
Ctrl-v):矩形块选择,适合列编辑——这是可视模式里最强大也最容易被忽略的子模式。
按 v、V、Ctrl-v 进入对应模式后,再用移动命令(hjkl、w、}、gg、G 等)扩展选区。选区确定后,按任意操作键(d、y、c、> 等)执行。
三种模式之间可以互相切换:在字符可视模式下按 V 切到行模式,按 Ctrl-v 切到块模式,无需先按 Esc 退出。
选区端点与 o 键
进入可视模式后,选区有两个端点:起点和光标所在位置。按 o 可以让光标跳到另一个端点,这样你就能往反方向调整选区。这在选中了一大片区域后发现"起点选错了"时非常管用,不用退出重来。
gv:重新选中上一次的选区
执行完操作后,选区就消失了。如果你想对同一个区域再做一次操作,按 gv 可以重新选中上一次的可视选区。这在连续对同一块文本执行多条命令时很实用,比如先 V 选中几行用 > 缩进,再 gv 重新选中用 :s/foo/bar/g 做替换。
块操作:列编辑的核心
块可视模式是 Vim 区别于其他编辑器的杀手功能。进入块选择后,你可以对矩形区域做以下操作:
| 操作 | 按键 | 说明 |
|---|---|---|
| 批量插入(左侧) | I | 在块左侧输入文本,按 Esc 后所有行同时生效 |
| 批量追加(右侧) | A | 在块右侧输入文本,按 Esc 后所有行同时生效 |
| 批量替换 | c | 删除选中内容并进入插入模式,输入后按 Esc 全部行生效 |
| 批量删除 | d 或 x | 直接删除选中块 |
| 单字符替换 | r | 将选中区域内每个字符替换为你输入的那个字符 |
实战:批量给多行加注释
假设你有以下代码,想给三行加 // 注释:
shellint a = 1; int b = 2; int c = 3;
操作步骤:
- 把光标移到第一行行首,按
Ctrl-v进入块可视模式。 - 按
jj(或2j)向下选中三行的第一个字符。 - 按
I(大写)在块左侧插入,输入//,然后按Esc。
三行会同时变成 // int a = 1;、// int b = 2;、// int c = 3;。
实战:批量修改对齐的值
假设你有一组配置项,想把 = true 改成 = false:
shelldebug = true verbose = true log = true
操作步骤:
- 光标移到第一行的
t上,按Ctrl-v进入块选择。 - 按
2j向下选中三行,再按e向右选中true整个单词。 - 按
c,输入false,按Esc。
三行同时变成 = false。
可视模式与 . 命令配合
Vim 的 . 命令会重复上一次修改操作。在可视模式下执行的操作同样可以被 . 重复。比如你用 V 选中一段代码做了 > 缩进,之后把光标移到另一段代码按 .,就能重复同样的缩进操作。这在批量格式化代码时效率很高。
可视模式与宏配合
宏(q 录制)和可视模式可以组合使用。常见场景:录制一个宏,其中包含可视模式选中某段文本并执行操作,然后用 @a 在其他位置重复执行。你也可以先在可视模式下选中多行,然后对选区执行 :'<,'>normal @a,让宏在每一行上运行。
可视模式下的搜索与替换
在可视模式下按 : 会自动填充 :'<,'>,表示命令范围限定在当前选区。你可以直接跟 s 命令做替换:
shell:'<,'>s/old/new/g
这比手动计算行号再写 :10,20s/old/new/g 方便得多。你也可以用 :! 对选区执行外部命令,比如 :'<,'>!sort 对选中行排序。
另一个实用技巧:在可视模式下按 g 再按 /,可以用选中的文字作为搜索模式(某些 Vim 版本和 Neovim 支持),快速跳转到下一个匹配位置。
Select 模式:Vim 里的"普通选中"
Vim 还有一个 Select 模式(gh 进入字符选择、gH 进入行选择、gCtrl-h 进入块选择),行为更接近普通编辑器:选中后直接输入文字会替换选区,不用先按 c 或 d。这个模式适合从其他编辑器刚转到 Vim 的用户做过渡,但长期来看,可视模式才是 Vim 的正道——因为可视模式下你可以先选中再决定做什么操作,更灵活。
vim-gv 插件:可视化浏览选区历史
gv 插件(非内置 gv 命令)提供了一个弹窗,列出你本次会话中的所有可视选区历史,你可以选择任意一条重新选中。安装后按两次 gv(第一次触发内置 gv,第二次触发插件)即可打开历史列表。对于需要频繁在不同选区之间切换的复杂编辑任务,这个插件能省不少事。
把可视模式变成肌肉记忆
Vim 可视模式的三个子模式覆盖了文本选择的所有场景:v 做精确字符选择,V 做整行操作,Ctrl-v 做列编辑。配合 o 切换端点、gv 重选、块操作的 I/A/c/d,以及与 . 命令和宏的组合,你几乎不需要离开键盘就能完成任何批量编辑。从今天开始,遇到需要选中多行或多列的场景,强迫自己用可视模式而不是鼠标——一周后你会发现编辑速度上了一个台阶。