01 Vim 的核心思想:把编辑当作一门文本操作语言
在 Vim 起步 中,你已经使用过 Normal Mode,也试过 w、$、i 和 x。现在把这些
按键放进一张更大的地图:Vim 不是让你记住大量彼此无关的快捷键,而是让你在 Normal Mode 中描述
一次文本编辑。
Action → 我要做什么?
Target → 我要操作什么?
Control → 要作用多远,或怎样重复?
以 d$ 为例:
d + $
│ │
│ └─ 到本行结尾
└──── delete
它的意思是“删除到本行结尾”。这里的 d 是 Operator,$ 是 Motion;在 Operator 之后,Motion 不只是
移动光标,也定义了要处理的范围。
Before — Normal Mode
const status = "draft";
^
Keys
d$
After — Normal Mode
const␠
^
␠ 表示留下来的空白,不是要输入的字符。Vim 执行完删除后仍处于 Normal Mode。
一条实用语法
后续章节会反复使用:
[count] operator [count] target
target = motion | text object
方括号表示可选。现在只需要先认识三个位置:
operator → d、c、y 等:做什么
motion → w、$、0 等:到哪里
count → 2、3 等:多少次或多远
Text Object 会在后面出现。它不是“到一个位置”,而是直接指定一个结构化对象,例如一个单词、引号中的 内容或括号中的内容。
不同 Mode 中,同一个键可能有不同职责
Vim 的组合能力依赖上下文。例如:
Normal Mode:
i → 在光标前进入 Insert Mode
a → 在光标后进入 Insert Mode
Operator-pending / Visual:
iw → inner word
aw → a word
因此,不能孤立地把 i 永远翻译成“插入”或“内部”。先判断当前处于哪个 Mode,再理解按键的角色。
先读出来,再按下去
遇到一个陌生组合时,可以先问:
- 第一个键是在执行什么 Action?
- 后续键是在描述 Motion,还是 Text Object?
- 有没有 Count 或 Repeat 改变范围?
这种读法不会让 Vim 没有例外,但能让绝大多数新命令有可推理的入口。下一章从 Target 的第一部分 开始:Motion 与 Count。
练习
const status = getStatus();
假设光标位于 status 的首字母,请分别写下 Action、Target 和 Control,用来表达以下意图:
- 删除从光标到行尾的内容。
- 只移动到行尾,不修改文本。
- 思考第二项为什么没有 Action。
先描述组成,再尝试按键;本章不要求扩展新的 Operator 或 Motion。
本章必须记住
Normal Mode 用于描述和执行编辑动作。
一次编辑可以理解为 Action + Target + Control。
Operator 后的 Motion 会定义操作范围。
暂时不用记
不必现在记住所有 Operator、Text Object 或 Count 的组合。先学会到达目标,再让编辑动作作用在目标上。
评论