双链 UI¶
编辑器状态栏展示反链数量与列表。右侧 References 展示当前论文的参考文献卡片;数据来自参考文献 sidecar 与库内匹配,见 ../backend/citation-parsing.md。
编辑器¶
[[wikilink]]Live Preview;光标进入显示源码。- 输入
[[:文件 / frontmatter alias / 标题 / block / 批注(@)候选;↑↓ 在列表内循环,不关闭菜单;底部提示#标题 · ^文本块 · |显示文本 · @批注。 - Frontmatter
aliases:笔记 YAML 中的别名参与 file 搜索与 resolve(与 Obsidian 一致)。按别名命中时只出现 alias 候选(主行=别名,副行=vault 相对路径),不再额外挂一条 basenameNOTES。选中后写入 canonical 目标(不自动补|显示名),便于继续输入#/@。同名 alias 多文件时列出多条,不静默选第一条。 - 嵌套标题路径没有层数限制:
[[2026-W31#07-28 周二#复盘分析#paper 阅读]]、同文件写法与对应![[...]]均合法。 - 完整路径是标题的 canonical identity;Markdown 引用也可省略开头祖先,使用任意长度的连续路径后缀,例如唯一时
[[2026-W31#复盘分析#paper 阅读]]合法。后缀命中多个标题时返回歧义,不选择第一个结果。 - 每输入一个额外
#,其前面的路径段成为已确认父路径,候选只显示该父标题的直接子标题。父路径本身也按后缀匹配,因此可从省略祖先的标题继续逐级补全,且没有两级或其他固定深度限制。 - 标题候选显示 canonical 路径
外层标题 › 内层标题,选择候选后写回完整外层标题#内层标题;手写的唯一后缀保持原文。查询接受源码分隔符#和候选展示分隔符›,并保留用户已输入的文件 target、alias 与 embed 标记。 @批注与#/^同属 fragment:[[@id]]、[[papers/…/NOTES@id|alias]]、[[paper.pdf@id]]、[[…#@id]](与@id等价)。target 必须是可解析路径/文件名,不要单独用论文展示标题;面板复制默认[[papers/…/NOTES@id|论文标题]]。id 来自高亮annotations.json或视觉 mark(kind: visual,旧agent-trace仍认;nanoid 可含_)。- 序列化必须写回
[[...]](Obsidian 兼容)。 ![[...]]:嵌入 Markdown 区段、图片、PDF、批注(只读);普通编辑不刷新无关嵌入。批注嵌入(contentKind: annotation)与其它 embed 共用max-h滚动壳;位置优先大纲路径否则页码。视觉批注:备注以图标 + 文字显示在裁剪图上方;仅当有 Agent 对话时才展示下方 transcript(无对话不显示空状态);正文不可点跳转,仅顶栏 ExternalLink 打开 PDF。Hostwiki check校验 path + id 形态,不读marks/验存活。- 导出模式(笔记导出 PDF/PNG):
MarkdownExportModeProvider下展开max-h、去掉打开源按钮;图片/批注裁剪图取消高度上限;完整 PDF 附件改为路径占位。见 markdown.md。
与 Markdown 双链(graph_get_graph / 反链)分层;双链索引仍服务编辑器补全、嵌入与状态栏反链,不驱动关系图。
链接修复(前端触发)¶
- Agentero 内重命名/移动:事务化修复已解析链接。
- 外部本地 rename:按设置
ask/always。 - 外部 rename 的双链修复与警告只关注 Markdown、PDF、受支持图片和疑似目录;JSON sidecar、临时文件等明确非链接目标仍刷新工作区,但不进入双链处理。
- 显式标题重命名事务。
标题重命名、跳转和嵌入继续消费同一个结构化 LinkFragment.path: string[]。该数组保存 Markdown 中实际写下的完整路径或连续后缀;解析成功后再映射到唯一 canonical heading path。显式标题重命名只改写引用中实际包含的被改名路径段,省略该祖先的后缀引用保持原文。
代码¶
- 面板:
src/components/wiki/ - 逻辑:
src/lib/wiki/、wiki-completion.ts、wiki-embed.ts、wiki-navigation.ts、wiki-heading-rename.ts - Host:../backend/wiki.md