大家好,之前我在 V2EX 发过几次 Markra ,最近一次是 1.0.0:
https://www.v2ex.com/t/1224360
距离 1.0.0 发布还不到一个月,Markra 2.0.0 又来了。
这个版本号看起来跳得有点快,但并不是为了追求“大版本”。真正的原因是一个一直没有稳定解决的中文输入法问题,最后迫使我把整个编辑器内核重写了一遍。
为什么要换编辑器内核
问题的典型复现是:
这是**测试内容**为格式文本的编辑。
在所见即所得模式下,把光标放到粗体文字边界,再用中文输入法继续输入,文字有时会落到错误的位置或继承错误的格式。
这个问题在普通浏览器、macOS 和 Windows 的系统 WebView 中表现不完全一致。围绕光标位置、格式状态和 IME composition 做过几轮修复后,我发现它并不是一个简单的 Markdown 解析 Bug ,而是 Milkdown / ProseMirror 的富文本文档、DOM 选区和系统输入法之间的边界兼容问题。
Issue 在这里:
https://github.com/markrahq/markra/issues/419
继续在应用层补边界逻辑仍然有可能缓解,但很难保证不同系统和输入法都稳定。最后我决定把 Milkdown / ProseMirror 完整替换成 CodeMirror 6 。
2.0.0 的编辑器有什么不同
新编辑器仍然是所见即所得,但 Markdown 源文本现在是唯一数据源。
**、链接地址、图片语法和代码围栏都真实存在于文档中。普通状态下通过 decoration 显示为格式或预览,光标进入相关范围后再展开源码。保存、搜索、AI 编辑和格式命令也都使用同一套文本位置。
这不是简单替换一个 npm 依赖。表格、图片、代码块、公式、Mermaid 、HTML 、frontmatter 、脚注、块拖拽、折叠、浮动工具栏和拼写检查等能力,都需要在 CodeMirror 上重新实现。
Alpha 阶段也出现了不少新问题,包括选区闪烁、图片在中文输入时反复重建、代码块无法正常选择、表格和源码态切换异常等。现在这些主要交互已经逐步稳定下来,2.0.0 也进入了可以日常测试的阶段。
这次还增加了什么
- 新增打字机模式和 Vim 模式。
- 支持未使用图片安全清理。
- 支持折叠文件列表、自定义主题开关和更多快捷键组合。
- 改进历史版本预览恢复、移动端 Web 文件列表和长时间流式 AI 请求。
- Markdown 语法标记在非活动状态下更弱化,需要编辑时再完整显示。
Markra 仍然保持本地优先:文件就是普通 .md,不需要注册,AI 连接用户自己配置的服务。桌面版支持 macOS 、Windows 和 Linux ,也可以直接使用 Web 版。
Web 版:
https://editor.markra.app/
GitHub:
https://github.com/markrahq/markra
桌面版下载:
https://github.com/markrahq/markra/releases
这次改动范围很大,尤其希望大家帮忙测试这些场景:
- 中文输入法在粗体、斜体、删除线和链接边界是否正常;
- 图片、表格、代码块、Mermaid 和 HTML 的编辑交互是否符合直觉;
- 长文档选择、拖拽和滚动是否还有闪烁或错位;
- 从 1.x 升级后,原有 Markdown 是否能够正常打开和保存。
如果遇到问题,直接提 Issue 就行。真实文档里的边界情况,比我自己构造的测试更有价值。
感谢之前几次帖子里帮忙试用、提建议和报 Bug 的朋友。1.0.0 是 Markra 第一次把主要能力完整跑通,2.0.0 则是把最核心的编辑器重新打了一遍地基。