背景
在使用 Typora 做学习笔记时,经常需要标记和追踪知识点在多个文件中的出现位置。目前没有简单的方式能快速查看"某个知识点在哪里定义的、在哪些地方被引用过"。
功能描述
- 使用内联标签(如
@@知识点名@@)标记知识点的定义和引用
- 通过侧边栏面板检索所有知识点及其出现位置
- 支持搜索过滤、点击跳转、高亮显示
- 支持跨文件夹扫描多个
.md 文件
- 不修改文档内容本身
- WYSIWYG 模式下隐藏
@@ 标记,以荧光笔样式展示知识点名称
实现方案
基于 obgnail/typora-plugin 框架,开发了 knowledgePoint 自定义插件。
核心功能
| 功能 |
说明 |
@@name@@ 标记语法 |
可配置前缀/后缀 |
| 内联渲染 |
WYSIWYG 模式下隐藏 @@,知识点名以紫色字体 + 淡紫色荧光笔底色显示 |
| 自动索引 |
扫描同文件夹所有 .md 文件,首次出现为定义,后续为引用 |
| 侧边栏面板 |
Ctrl+Shift+K 或右键菜单触发 |
| 搜索过滤 |
实时模糊匹配知识点名称 |
| 点击跳转 |
当前文件滚动+高亮(2s渐隐),跨文件同窗口打开并跳转到对应行 |
| 跨文件高亮 |
跳转到其他文件后自动高亮目标段落 |
| 范围切换 |
当前文件 / 当前文件夹 |
| 面板调整 |
拖拽左边缘调整宽度(240-600px) |
| 快捷键 |
Esc 关闭面板,搜索框 Esc 先清空再关闭 |
| 窗口控制 |
最小化/最大化/关闭按钮,类 Windows 风格 |
| 实时更新 |
编辑时自动刷新索引,刷新按钮自动保存当前文件 |
| 输入补全 |
输入 @@ 弹出知识点下拉列表,↑↓←→ 循环选择,Enter/Tab 插入 |
| 窗口聚焦重扫 |
窗口重新获得焦点时自动重新扫描 |
| 已删除文件标记 |
文件不存在时条目显示为灰色禁用状态 |
内联渲染
输入补全
关键设计决策
- 非破坏性:插件从不修改文档内容,高亮和内联渲染通过纯 CSS + DOM 操作实现
- 确定性定义分配:按文件名字母序排序,跨文件第一个出现为定义
- DOM 关联:独立扫描编辑器 DOM
[cid] 元素,将索引条目映射到实际 DOM 节点
- 三级回退导航:Typora API → 工具方法 → 剪贴板复制 + 提示
- XSS 安全:上下文预览使用
textContent 而非 innerHTML
- 内联渲染:MutationObserver 监听 DOM 变化,TreeWalker 遍历文本节点,splitText 拆分 + 替换为 span
背景
在使用 Typora 做学习笔记时,经常需要标记和追踪知识点在多个文件中的出现位置。目前没有简单的方式能快速查看"某个知识点在哪里定义的、在哪些地方被引用过"。
功能描述
@@知识点名@@)标记知识点的定义和引用.md文件@@标记,以荧光笔样式展示知识点名称实现方案
基于 obgnail/typora-plugin 框架,开发了
knowledgePoint自定义插件。核心功能
@@name@@标记语法@@,知识点名以紫色字体 + 淡紫色荧光笔底色显示@@弹出知识点下拉列表,↑↓←→ 循环选择,Enter/Tab 插入内联渲染
输入补全
关键设计决策
[cid]元素,将索引条目映射到实际 DOM 节点textContent而非innerHTML