05 Change 与插入位置:完成一次修改
c 不只是删除。它先按 Target 删除文本,再进入 Insert Mode,让你马上输入替代内容。因此一次 Change
通常由三部分组成:选择目标、输入新内容、按 <Esc> 回到 Normal Mode。
ciwname<Esc>
│ │ │ │
│ │ │ └─ 回到 Normal Mode,结束这次修改
│ │ └────── 输入替代文本
│ └───────── inner word
└──────────── change
插入位置是一组空间关系
| 命令 | 位置 |
|---|---|
i / a | 光标前 / 光标后。 |
I / A | 当前行首个非空白字符前 / 当前行尾后。 |
o / O | 当前行下方 / 上方新建一行并进入 Insert Mode。 |
O
↑
I ← [ current line ] → A
↑ ↑
i a
↓
o
i、a 在这里是 Normal Mode 下的插入命令;在 diw、ci( 之类的组合中,它们是 Text Object 的前缀。
先看当前 Mode,含义就不会冲突。
一个完整 Change
Before — Normal Mode
const userName = account.owner;
^
Keys
ciwname<Esc>
After — Normal Mode
const name = account.owner;
^
这次操作结束后,. 可以在另一个类似目标上重放整次修改。下一节会专门练习这个能力。
什么时候用 i/a,什么时候用 c
- 只是在当前位置增加内容:使用
i、a、I、A、o、O。 - 已经有一段明确对象,需要替换:使用
c加 Motion 或 Text Object。
例如,把 profile 改成 settings 时,ciw 比先移动、选中、删除、再插入更直接。
练习
function loadUser(user: User) {
return user.profile.name;
}
- 在函数名后补上
Async。 - 把
profile改成另一个属性名。 - 在
return行上方插入一行注释。 - 把参数列表中的内容替换成另一个参数名,同时保留圆括号。
本章必须记住
Change = 删除目标 + Insert Mode。
i/a/I/A/o/O 表达插入位置。
<Esc> 让一次修改回到确定的 Normal Mode。
暂时不用记
暂时不用记 Replace Mode、补全或自动缩进的配置。它们不会改变基础编辑语言。
评论