核心理念:回归纯文本
eudoxia0/hashcards 是一个遵循极简主义哲学的间隔复习系统(SRS)。与 Anki 等依赖复杂数据库和图形界面的工具不同,Hashcards 完全基于纯文本文件。这意味着你可以使用任何喜欢的编辑器(如 Vim、VS Code)编写闪卡,并利用 Git 进行版本控制和同步。
该项目使用 Rust 编写,目前在 GitHub 上已获得 830 颗星,其设计重点在于降低创建卡片的阻力,同时保持系统的高效与透明。
内容寻址(Content Addressable)
Hashcards 的一个关键特性是其独特的卡片识别方式:内容哈希。系统通过卡片文本的哈希值来唯一标识一张闪卡。这意味着:
- 如果你修改了卡片的内容,其哈希值会随之改变,系统会将其视为一张全新的卡片并重置复习进度。
- 这种设计强制执行了记忆的一致性:如果你需要修改定义,说明你之前的记忆模型可能已经失效,重新学习是合理的。
高效的调度算法:FSRS
尽管外观简洁,Hashcards 在算法上并不落后。它采用了现代的 FSRS (Free Spaced Repetition Scheduler) 算法。相比于传统的 SM-2 算法,FSRS 能够更精准地模拟人类记忆的遗忘曲线,通过最少的复习次数达到预期的保留率,显著提升学习效率。
语法与格式
Hashcards 支持两种基本的卡片类型:
- 问答卡(Front-Back): 使用
Q:和A:标签。 - 完形填空(Cloze): 使用
C:标签,并通过方括号[...]标记挖空部分。
此外,它内置了对开发者友好的功能:
- LaTeX 支持: 通过 KaTeX 渲染数学公式,支持内联
$ ... $和块级$$ ... $$模式。 - 多媒体: 支持标准 Markdown 语法插入图片和音频文件。
- 元数据管理: 支持 TOML frontmatter 来定义卡片组(Deck)名称,方便跨文件组织内容。
工作流与操作
Hashcards 采用了“CLI 驱动 + Web 交互”的模式。用户在终端通过命令行启动复习任务:
BASH$ hashcards drill ./my_cards
该命令会启动一个本地 Web 服务器(默认端口 8000),用户通过浏览器进行复习。这种架构既保留了命令行工具在数据管理上的灵活性,又提供了流畅的交互体验。复习数据存储在卡片目录下的
hashcards.db(SQLite3 数据库)中,方便用户进行深度数据分析或导出。适用场景
如果你是一名开发者,或者习惯于使用 Markdown 记录笔记,Hashcards 提供了一种将学习资料转化为记忆闪卡的无缝方式。它解决了复杂 SRS 工具中数据难以搜索、难以版本化以及格式闭源的痛点。