跳到主要内容

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

ia 在这里是 Normal Mode 下的插入命令;在 diwci( 之类的组合中,它们是 Text Object 的前缀。 先看当前 Mode,含义就不会冲突。

一个完整 Change

Before — Normal Mode

const userName = account.owner;
^

Keys

ciwname<Esc>

After — Normal Mode

const name = account.owner;
^

这次操作结束后,. 可以在另一个类似目标上重放整次修改。下一节会专门练习这个能力。

什么时候用 i/a,什么时候用 c

  • 只是在当前位置增加内容:使用 iaIAoO
  • 已经有一段明确对象,需要替换:使用 c 加 Motion 或 Text Object。

例如,把 profile 改成 settings 时,ciw 比先移动、选中、删除、再插入更直接。

练习

function loadUser(user: User) {
return user.profile.name;
}
  1. 在函数名后补上 Async
  2. profile 改成另一个属性名。
  3. return 行上方插入一行注释。
  4. 把参数列表中的内容替换成另一个参数名,同时保留圆括号。

本章必须记住

Change = 删除目标 + Insert Mode。
i/a/I/A/o/O 表达插入位置。
<Esc> 让一次修改回到确定的 Normal Mode。

暂时不用记

暂时不用记 Replace Mode、补全或自动缩进的配置。它们不会改变基础编辑语言。

评论