增加quote功能

主要有整理笔记时, 有些内容需要注意引用的需求, 在给[^2]提交PR后很可惜作者一直没有上线, 就去提交给了markdown all in one, 在大佬们的讨论中, 发现这样一个场景, markdown的语法中对于引用只要求>符号即可, 但是在各渲染及自动补充的实现中, 追加空格是个优雅的习惯. 然后在[^3]的review中, 大佬发现针对是否增加空格, 针对多级列表, github的markdown渲染的表现还不一致. 这就导致这套实现存在局限性了, 轻易引入存在较大bug风险了.

所以这个插件暂时主要用于下述需求的场景, 对于需要对多级列表等进行引用的场景, 还没有一个比较好的方案.

自己先单独封装了一个来使用.

场景

  • cursor在某个位置, 未选中任何内容
    • 需求: 该行行首增加>即可
  • 当选中了单行中的部分文本
    • 该文本所在行首增加>
  • 当选中了多行文本
    • 每行选中文本的行首增加>即可.
    • 或者根据每行行首绝对如何反转,是增加还是删除
      • 不对,根据我个人的需求, 应该是三种状态, 如果存在未补全的, 则补全. 如果全部补全了才需要进行反转.
  • 针对一些非标准格式的quote是否需要支持修改? 增加一个修正吧. 只要是匹配规则的, 都进行修正. 主要只针对缩进的吧.

实现

1. 找一下该插件中提供文本内容的显示的接口

1
2
3
let editor = window.activeTextEditor;
let lineIndex = editor.selection.active.line;
let lineText = editor.document.lineAt(lineIndex).text;

上面的接口似乎满足了第一需求

2. 寻找如何根据获取选中内容部分的当前行内容的行首指针.

这个通过获取到start所在line的Start就可以了.

3. 针对第三种需求的三种状态切换

进行简化

场景一和场景二的最终动作都是在该行增加>

场景一和场景二? 增加一个循环, 一开始获取到selection的时候就可以设置为循环, 最后处理为循环内每行遍历. 如果是场景一和场景二那就是处理当行

都是根据遍历后的状态进行处理.

首先一开始,场景一可以提取为场景二, 获取到指针所在行的全部内容, 场景三, 由于我们不关心尾部内容,因此其实也就是场景二的状态,只需要处理start所在指针的内容.(PS, 后来发现如果不关心尾部内容,也是存在问题的, 插入内容的时候直接导致尾部的文字会被替换一部分)