Skip to content

nvim learn 02 editing and text objects

ES edited this page Jul 16, 2026 · 1 revision

02 编辑与文本对象

新手第二课:Vim 编辑的核心公式 — 动词 + 范围。掌握这个组合,效率起飞


1. 核心公式

[数字] + 动词 + 范围

例如:d2w(删 2 个词)、ci"(改引号内)、yap(复制段落含前后空行)


2. 动词(Operators)

动词 作用
d delete 删除
c change 删除并进入插入模式
y yank 复制
v visual 选中(然后手动操作)
> / < indent 增加 / 减少缩进
= format 自动缩进
gu lowercase 转小写;u 可联想小写
gU Uppercase 转大写
g~ toggle case 翻转大小写
gq format 按 textwidth 重排文本;q 没有可靠缩写

动词重复自身 = 作用于整行dd 删行、cc 改行、yy 复制行、>> 缩进行、guu 整行小写


3. 范围(Motions & Text Objects)

3.1 Motion 范围

Motion 即移动命令,动词 + motion = 从光标到目标的范围:

范围 英文助记 含义 示例
w word 到下一个词首 dw 删到下一个词首
e end 到当前词尾 de 删到词尾
b backward 到上一个词首 db 删到上一个词首
$ 行尾符号 到行尾 d$D 删到行尾
0 第 0 列 到行首 d0 删到行首
^ 行首锚点 到行首非空 d^ 删到行首非空
gg go 到文件头 dgg 删到文件头
G go 到文件尾 dG 删到文件尾
f{char} find 到本行的 char df) 删到右括号(含)
t{char} till 到 char 前一格 dt) 删到右括号前
/{pattern} search 到搜索匹配处 d/foo 删到 foo 出现处

3.2 文本对象

文本对象是结构化的范围,不依赖光标位置,而是基于文本结构。两种前缀:

  • i = inner(内部,不含分隔符)
  • a = around(周围,含分隔符 / 前后空格)
对象 含义 inner(内部) around(整体)
w word(单词) diw 删除词 daw 删除词及周围空格
W WORD diW 按空格分词删除 daW 删除 WORD 及周围空格
s sentence(句子) dis 删除句子内容 das 删除句子及前后空格
p paragraph(段落) dip 删除段落内容 dap 删除段落及前后空行
" 双引号 di" 删除引号内内容 da" 连同双引号删除
' 单引号 di' 删除引号内内容 da' 连同单引号删除
` 反引号 di` 删除引号内内容 da` 连同反引号删除
(b 小括号 di( / dib 删除括号内内容 da( / dab 连同括号删除
{B 大括号 di{ / diB 删除括号内内容 da{ / daB 连同括号删除
[ 方括号 di[ 删除括号内内容 da[ 连同括号删除
< 尖括号 di< 删除括号内内容 da< 连同括号删除
t tag(HTML/XML 标签) dit 删除标签内容 dat 连同标签删除

3.3 实战示例

// 光标在 hello 的 e 上
const str = "hello world"

ci"       // → const str = "|"           改引号内(光标留在引号间,插入模式)
da"       // → const str =               删除含引号

// 光标在函数体内任意位置
function test(a, b) {
  return a + b
}

di{       // 删除函数体,保留花括号
da{       // 删除整个 { ... }
ci(       // 改参数列表(删除 a, b 并进入插入模式)

// HTML
<div>content</div>

dit       // 删除 content,保留标签
dat       // 删除整个 <div>content</div>

4. 搜索与替换

命令 作用
:s/old/new/ 替换当前行第一个匹配
:s/old/new/g 替换当前行所有匹配
:%s/old/new/g 替换全文所有匹配
:%s/old/new/gc 替换全文,逐个确认(y = yes / n = no / a = all)
:5,10s/old/new/g 替换第 5~10 行

搜索替换中的特殊字符

字符 含义
. 任意字符
\d 数字
\w 字母/数字/下划线
\n 换行(替换中用 \r
\( \) 捕获组
\1 引用第一个捕获组
\< \> 单词边界

5. 常用编辑操作

操作 按键 说明
撤销 u undo
重做 Ctrl-r redo
重复上次修改 . 最强按键 — 见下方技巧
合并行 J join:当前行与下一行合并(加空格)
合并行(不加空格) gJ 同上但不加空格
翻转字符大小写 ~ 翻转光标下字符并右移
数字 +1 / -1 Ctrl-a / Ctrl-x 光标下或光标后的第一个数字
缩进 / 反缩进 >> / << 当前行

6. . 的妙用

. 重复上次"修改操作"(从进入 Insert 到退出算一次完整操作)。经典用法:

场景:把多处 foo 改成 bar

/foo        搜索 foo
cgn         选中下一个匹配并改为...输入 bar,按 Esc
.           重复(自动找下一个 foo 并改为 bar)
.           再来一次
n           跳过这个不改
.           改下一个

cgn = change + gn(gn 选中下一个搜索匹配),配合 . 实现逐个替换,比 :%s 更可控


下一步

基础编辑学完了,进入 Advanced Commands 学习高级命令和开发技巧

Clone this wiki locally