Skip to content

[Feature] 知识点检索插件 — 实现已完成 #1189

Description

@LucasandElliot

背景

在使用 Typora 做学习笔记时,经常需要标记和追踪知识点在多个文件中的出现位置。目前没有简单的方式能快速查看"某个知识点在哪里定义的、在哪些地方被引用过"。

功能描述

  1. 使用内联标签(如 @@知识点名@@)标记知识点的定义和引用
  2. 通过侧边栏面板检索所有知识点及其出现位置
  3. 支持搜索过滤、点击跳转、高亮显示
  4. 支持跨文件夹扫描多个 .md 文件
  5. 不修改文档内容本身
  6. WYSIWYG 模式下隐藏 @@ 标记,以荧光笔样式展示知识点名称

实现方案

基于 obgnail/typora-plugin 框架,开发了 knowledgePoint 自定义插件。

核心功能

功能 说明
@@name@@ 标记语法 可配置前缀/后缀
内联渲染 WYSIWYG 模式下隐藏 @@,知识点名以紫色字体 + 淡紫色荧光笔底色显示
自动索引 扫描同文件夹所有 .md 文件,首次出现为定义,后续为引用
侧边栏面板 Ctrl+Shift+K 或右键菜单触发
搜索过滤 实时模糊匹配知识点名称
点击跳转 当前文件滚动+高亮(2s渐隐),跨文件同窗口打开并跳转到对应行
跨文件高亮 跳转到其他文件后自动高亮目标段落
范围切换 当前文件 / 当前文件夹
面板调整 拖拽左边缘调整宽度(240-600px)
快捷键 Esc 关闭面板,搜索框 Esc 先清空再关闭
窗口控制 最小化/最大化/关闭按钮,类 Windows 风格
实时更新 编辑时自动刷新索引,刷新按钮自动保存当前文件
输入补全 输入 @@ 弹出知识点下拉列表,↑↓←→ 循环选择,Enter/Tab 插入
窗口聚焦重扫 窗口重新获得焦点时自动重新扫描
已删除文件标记 文件不存在时条目显示为灰色禁用状态

内联渲染

Image

输入补全

Image

关键设计决策

  • 非破坏性:插件从不修改文档内容,高亮和内联渲染通过纯 CSS + DOM 操作实现
  • 确定性定义分配:按文件名字母序排序,跨文件第一个出现为定义
  • DOM 关联:独立扫描编辑器 DOM [cid] 元素,将索引条目映射到实际 DOM 节点
  • 三级回退导航:Typora API → 工具方法 → 剪贴板复制 + 提示
  • XSS 安全:上下文预览使用 textContent 而非 innerHTML
  • 内联渲染:MutationObserver 监听 DOM 变化,TreeWalker 遍历文本节点,splitText 拆分 + 替换为 span

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions