跳转到内容

编辑器

网页应用的笔记界面顶部有一个阅读视图 / 编辑切换。丰富的渲染发生在阅读视图中;编辑模式则是一个用于编写 markdown 的纯文本 CodeMirror 6 输入框。

查看器是一套为兼容 Obsidian 而设计的 remark/rehype 技术栈。能在 Obsidian 中渲染的内容,在这里也应能渲染。

  • CommonMark + GFM:标题、列表、表格、围栏代码块、删除线、任务列表
  • Wikilink:[[Note Title]] 和 [[Note Title|Display Text]],渲染为指向 /notes/<path> 的链接
  • 图片嵌入:![[image.png]] 会解析到需要认证的附件 API
  • Callout:Obsidian 风格的 > [!note]、> [!warning]、> [!tip] 等,通过 @portaljs/remark-callouts 实现
  • KaTeX 数学公式:$inline$ 和 $$display$$
  • Mermaid 图表:围栏式 ```mermaid 代码块
  • 语法高亮:围栏代码块使用 rehype-highlight 渲染
  • Frontmatter:文件顶部的 YAML 由 gray-matter 解析,正文渲染在其下方
  • 标题自动链接:每个标题都会生成 slug 和锚点链接

编辑模式会换成一个 CodeMirror 6 输入框,带有 markdown 语言插件(语法高亮)、自动换行,以及适合移动端的 16px 字体,以避免 iOS Safari 自动缩放。

没有保存按钮。编辑器会在你输入时自动保存:笔记顶部的状态指示器在写入进行中显示_正在保存…,写入完成后显示_已保存,如果写入出错则显示_保存失败_,并带有可点击的_重试_链接。

网页编辑器有意定位为快速记录的界面:打开笔记、编辑、走人。如果需要更丰富的写作功能(斜杠菜单、编辑器内查找/替换、wikilink 和标签自动补全),Obsidian 才是合适的工具。这种分工是有意为之,而不是功能缺失;Obsidian 本身已经是出色的编辑器,我们也与它原生同步,所以网页应用专注于那些在 Obsidian 中难以做好的事情(跨知识库浏览、无需 Obsidian iOS 应用的移动端访问、随处可用的浏览器访问)。

网页编辑器与插件使用同一套同步引擎。如果你打开一条笔记时另一台设备编辑了同一条笔记,编辑器会作出响应,而不会丢失你的内容:

  • 传入的远端编辑会通过三方合并融入你打开的草稿。干净的合并会静默完成。
  • 如果你的保存与另一台设备的写入发生竞争,后端会返回 409。编辑器会获取最新版本,通过三方合并把你的编辑变基到其上,并自动重试保存。
  • 当合并存在真正的行级重叠时,你的草稿会保持原样,并出现一个不阻塞的 ConflictBar,提供三个选择:保留我的、采用对方的或查看合并。不会有任何内容被静默丢弃。

任何依赖 Obsidian 社区插件的内容(Dataview 查询、Templater 输出、自定义 canvas 扩展、Excalidraw 图形等)**都不会在网页编辑器中执行。**网页应用自带渲染器,无法运行来自你 Obsidian 安装的插件代码。Dataview 块会渲染为普通的围栏代码,Templater 语法保持未解析,诸如此类。

依赖插件渲染的笔记仍然是安全的。它们会以普通 markdown 同步,并在 Obsidian 中显示正确。只是在网页应用中查看时,不会得到动态渲染。

插件兼容性是我们可能在未来某个大版本中探索的事项,但目前不在路线图上。

编辑器对触控友好,但受限于小屏幕。在手机上进行大量编辑时,Obsidian 移动端通常是更好的选择。快速编辑和搜索在网页应用中完全可行。