Vim 编辑与文本对象:删除 / 复制 / 粘贴 / 撤销 + 精准选区
更新时间:2026-08-30。本文是
languages/vim/主题入门层第 5 篇。"动词+对象"是 Vim 编辑的精髓。
本文要回答的问题
- 删除、复制、粘贴、撤销分别用什么键?
- 为什么高手改一段代码不用先选中再删?
- "文本对象"是什么,怎么用它精准操作一个词 / 一句 / 一个括号块?
一、四件套:删除 / 复制 / 粘贴 / 撤销
| 操作 | 普通模式键 | 说明 |
|---|---|---|
| 删除 | d + 范围 / x | x 删光标字符,d 是"删除动词" |
| 复制(yank) | y + 范围 | yank 来自"yank = 猛拉",即复制 |
| 粘贴 | p / P | p 光标后贴,P 光标前贴 |
| 撤销 | u | undo |
| 重做 | Ctrl-r | redo |
注意:删除的内容也进了剪贴寄存器,所以 dw 之后 p 能把它贴回来——删除 ≈ 剪切。
二、动词 + 范围:d 和 y 怎么用
d(delete)和 y(yank)是"动词",要跟一个"范围/对象"才完整:
| 组合 | 含义 |
|---|---|
dw | 删一个词(delete word) |
dd | 删整行 |
d$ | 删到行尾 |
diw | 删光标所在的词(inner word,不含两侧空格) |
yy | 复制整行 |
y$ | 复制到行尾 |
三、文本对象:从"数字符"到"说意图"
这是 Vim 最让新手惊艳的设计。文本对象让你不必先选中,直接对"一个词/一句/一段/一个括号"操作:
| 对象 | 含义 | 示例 |
|---|---|---|
iw / aw | inner/around word | ciw 改词、daw 删词连空格 |
is / as | inner/around sentence | cis 改句 |
ip / ap | inner/around paragraph | dap 删段 |
i( i) / a( | inner/around 圆括号 | ci( 改括号内内容 |
i{ / a{ | 花括号 | di{ 删花括号内 |
i" / a" | 双引号串 | ci" 改引号内字符串 |
i< / a< | 尖括号 | ci< 改标签内容 |
i= inner(不含边界),a= around(含边界及两侧空白)。ci(只改括号里,ca(连括号一起改。
实战:光标在 print("hello") 的任意位置,敲 ci" 直接进入插入模式改字符串,不用先移动再删。
四、可视模式选中再操作
有些场景还是先看到选区更安心:
| 键 | 进入 | 选中单位 |
|---|---|---|
v | 字符可视 | 逐字符 |
V | 行可视 | 逐行 |
Ctrl-v | 块可视 | 矩形块(列编辑神器) |
选中后按 d 删、y 复制、c 改、> 缩进、< 反缩进。块可视(Ctrl-v)能纵向改多行开头,配 多窗口 很好用。
五、与本站主线衔接
一句话总结
Vim 编辑 = 动词(d/y/c)+ 范围/对象:dw 删词、ci" 改引号内容、p 粘贴、u 撤销;文本对象让你"说意图而非数字符",是效率跃迁的关键一步。