主要观点:当被问“光标在哪”时,通常用“行 18”或“行 18,列 5”回答。文本编辑器 Zed 除用行和列描述位置外,还有偏移量、UTF-16 偏移量、显示点和锚点等多种坐标系统。
关键信息:
- Point:文本缓冲区中从零开始的点,由行和列组成,如
struct Point { row: u32, column: u32, }
,遵循打字机逻辑,行增加时列重置为 0,操作时需小心处理。 - Offset:表示文档中从开始位置的字节绝对数,处理跨多行文本操作时很有用,如选择操作,但单独使用也有小缺陷。
- UTF-16:在 Zed 代码库中,
OffsetUtf16
和PointUtf16
较多,用于与语言服务器通信,Rope
数据结构已索引 UTF-16 点和偏移量,创建了新的坐标系统。 - DisplayPoint:是围绕
BlockPoint
的新类型,在编辑器内部,其行和列与磁盘上文本文件的对应行和列含义不同,考虑了软换行、折叠、内嵌提示等因素,能准确描述光标位置。 - Anchor:与文本文档中的位置相关,可指向给定字符的一侧,是协作文本编辑器的重要部分,通过 Lamport 时间戳和偏移量来标识位置,即使文本编辑也能保持有效,可用于后台处理文本,如发送到语言服务器。
重要细节:文中通过代码示例和截图详细说明了各坐标系统的特点和用法,如测试代码展示Point
的使用、Rope
中关于PointUtf16
的方法等,还通过具体文档示例解释了Anchor
的作用。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。