文档核心概念光标与稳定位置 (Cursor and Stable Positions)

光标与稳定位置

快速概览

光标(Cursor) 通过锚定到操作 ID 而非索引,在并发编辑中保持稳定位置。这是实现协同光标、持久标注等功能的关键。

工作原理

光标会同时锚定到 OperationID 和 ContainerID,而不是简单的索引:

文本:    H e l l o   W o r l d
操作ID:  1 2 3 4 5 6 7 8 9 A B
光标:    指向 ID 5(字符 'o' 之后)

在开头并发插入后:
文本:    N e w   H e l l o   W o r l d
操作ID:  C D E F 1 2 3 4 5 6 7 8 9 A B
光标:    仍然引用 ID 5,位置自动更新

Side 参数

  • Side.Before (-1):保持在目标之前
  • Side.Middle (0):位于目标上(默认)
  • Side.After (1):保持在目标之后
const  = new ();
const  = .("text");
.(0, "ABC");
 
const  = .(1, -1); // 位于 'B' 前
.(1, "X"); // 在光标处插入
// 结果: "AXBC",光标仍在 'B' 前
const  = .(!);
.(); // { offset: 2, side: Side.Before }

常见场景

文本选区

const  = new ();
const  = .("text");
.(0, "Hello World");
 
// 选区范围
const  = .(0, -1);  // 锚点
const  = .(5, 1);     // 选区末尾

列表位置

const  = new ();
const  = .("items");
.(0, ["a", "b", "c"]);
 
const  = .(0, 1); // 位于 "a" 之后
.(0, "new"); // 光标会自动调整

相关文档