目前正在洛谷广泛使用的 Markdown 编辑器 Markdown*palletes(https://github.com/luogu-dev/markdown-palettes) 因为年久失修积累了太多 bug。并且由于其开发基于 Codemirror5 以及 Vue2,已经无法适配新前端项目,因此我们计划更换 Markdown 编辑器。
于是我最近写了一个新的 Markdown 编辑器,基于 Codemirror6 和 Vue3。
需要注意的是,由于 micromark-extension-math 支持的公式语法与洛谷并不完全相同,所以预览地址上的数学公式语法稍有不同;事实上我们已经编写了适配洛谷数学公式语法的 micromark-extension-math,不过由于在私有仓库里,所以没有在上述预览地址里应用。
编辑器大致进行了如下改进:
新增内容
- 使用 remark+rehype 生态进行渲染,完全支持 GFM,包括洛谷之前不支持的 task list 和 Link reference definitions。这些与洛谷新前端将会采用的渲染机制相一致,可以参考文章区的渲染效果。
- 预期加入一些新的插件丰富编辑体验。不过这部分需要进一步讨论。
- 增加了一些 Codemirror 自带功能。包括:
- 搜索替换功能(Ctrl+F);
- 折叠文段功能;
- 自动补全,例如编写引用块自动添加右尖括号。
- 优化了同步滚动效果,看上去比之前的更流畅。
- 优化了工具栏的功能。
修复 Bug
- 修复了全屏后编辑器光标乱飞的问题。
- 修复了全屏后并没有将编辑器完全覆盖页面的问题。
- 修复了全屏后编辑区滚动不正确的问题。
- 修复了编辑区没有禁用 HTML 的问题(无意书写 HTML 标签格式例如 <a> 会导致奇怪的缩进问题)
- 修复了编辑区不能正确识别数学公式的问题(例如编写
$ {p}_{a_b}$
会有奇怪的斜体,十分影响编辑)。
* 上述三个问题在 ByteMD 里均有出现,并且由于 ByteMD 也处于没人维护的状态并且使用更旧的 Codemirror5,于是我没有决定采用他们的方案。
- 修复了禁用预览之后编辑区仍然只占据一半空间的问题。
- 修复了空格宽度十分诡异的问题。
TODO
- 拖拽图片自动上传图床。
- 按键绑定。
- 编辑较长文章时同步渲染依然会卡顿,需要增加选项控制多久刷新一次预览。
- 更换部分工具栏图标。
- 国际化(?)
不过由于个人精力有限,所以可能会导致一些新的 bug,所以需要经过一段时间的测试。并且投入实际使用可能也需要一段时间(咕咕咕)。
希望大家能够反馈目前阶段存在的 bug()