核心理念:回归纯文本

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 支持两种基本的卡片类型:
  1. 问答卡(Front-Back): 使用 Q:A: 标签。
  2. 完形填空(Cloze): 使用 C: 标签,并通过方括号 [...] 标记挖空部分。
此外,它内置了对开发者友好的功能:
  • LaTeX 支持: 通过 KaTeX 渲染数学公式,支持内联 $ ... $ 和块级 $$ ... $$ 模式。
  • 多媒体: 支持标准 Markdown 语法插入图片和音频文件。
  • 元数据管理: 支持 TOML frontmatter 来定义卡片组(Deck)名称,方便跨文件组织内容。

工作流与操作

Hashcards 采用了“CLI 驱动 + Web 交互”的模式。用户在终端通过命令行启动复习任务:
BASH
$ hashcards drill ./my_cards
该命令会启动一个本地 Web 服务器(默认端口 8000),用户通过浏览器进行复习。这种架构既保留了命令行工具在数据管理上的灵活性,又提供了流畅的交互体验。复习数据存储在卡片目录下的 hashcards.db(SQLite3 数据库)中,方便用户进行深度数据分析或导出。

适用场景

如果你是一名开发者,或者习惯于使用 Markdown 记录笔记,Hashcards 提供了一种将学习资料转化为记忆闪卡的无缝方式。它解决了复杂 SRS 工具中数据难以搜索、难以版本化以及格式闭源的痛点。