光标与稳定位置
快速概览
光标(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"); // 光标会自动调整