文本坐标系 - Zed 博客

主要观点:当被问“光标在哪”时,通常用“行 18”或“行 18,列 5”回答。文本编辑器 Zed 除用行和列描述位置外,还有偏移量、UTF-16 偏移量、显示点和锚点等多种坐标系统。
关键信息:

  • Point:文本缓冲区中从零开始的点,由行和列组成,如struct Point { row: u32, column: u32, },遵循打字机逻辑,行增加时列重置为 0,操作时需小心处理。
  • Offset:表示文档中从开始位置的字节绝对数,处理跨多行文本操作时很有用,如选择操作,但单独使用也有小缺陷。
  • UTF-16:在 Zed 代码库中,OffsetUtf16PointUtf16较多,用于与语言服务器通信,Rope数据结构已索引 UTF-16 点和偏移量,创建了新的坐标系统。
  • DisplayPoint:是围绕BlockPoint的新类型,在编辑器内部,其行和列与磁盘上文本文件的对应行和列含义不同,考虑了软换行、折叠、内嵌提示等因素,能准确描述光标位置。
  • Anchor:与文本文档中的位置相关,可指向给定字符的一侧,是协作文本编辑器的重要部分,通过 Lamport 时间戳和偏移量来标识位置,即使文本编辑也能保持有效,可用于后台处理文本,如发送到语言服务器。
    重要细节:文中通过代码示例和截图详细说明了各坐标系统的特点和用法,如测试代码展示Point的使用、Rope中关于PointUtf16的方法等,还通过具体文档示例解释了Anchor的作用。
阅读 12
0 条评论