Obsidian 刷题插件 / CSV-based Quiz Plugin for Obsidian
基于 CSV 文件的 Obsidian 刷题插件。将你的题库写入 CSV,然后在 Obsidian 中刷题、标记、筛选、统计正确率;支持将题库编译为 .cqv 产物分发给使用者。
A CSV-based quiz practice plugin for Obsidian. Write your question bank in a CSV file, then practice with filtering, tagging, and progress tracking; compile your bank into a .cqv artifact for distribution.
在 vault 根目录创建 题库.csv(也可在设置中指定其他路径)
Create 题库.csv in your vault root (or set a custom path in settings)
点击左侧 ribbon 的图书图标,或执行命令 打开刷题面板
Click the book icon in the left ribbon, or run the command 打开刷题面板
开始刷题 Start practicing
CSV 文件必须为 BOM 前缀的 UTF-8 编码,15 列:
The CSV file must be BOM-prefixed UTF-8 with 15 columns:
序号,题干,选项A,选项B,选项C,选项D,正确答案,标签,一级分类,二级分类,三级分类,收藏,掌握,重复,错题
| 列 / Column | 说明 / Description |
|---|---|
| 序号 / ID | 题目的唯一标识,必须非空且不重复(空或重复题号将拒绝加载)/ Unique non-empty ID (empty/duplicate IDs are rejected) |
| 题干 / Stem | 支持 Markdown 渲染 / Supports Markdown rendering |
| 选项A~D / Options A-D | 四个选项 / Four answer options |
| 正确答案 / Correct Answer | A, B, C 或 D |
| 标签 / Tags | 空格分隔,如 #数学 #代数 / Space-separated, e.g. #Math #Algebra |
| 一级~三级分类 / Categories | 三级分类体系,用于筛选 / 3-level category hierarchy for filtering |
| 收藏/掌握/错题 / Favorite/Mastered/Wrong | 初始标记:1 = 是 / yes, 0 = 否 / no。运行中的变更保存在状态文件,不再写回 CSV / Initial flags; runtime changes go to the sidecar state file, not the CSV |
| 重复 / Repeat | 作者标记的重复题(有发布价值)/ Author-marked duplicate questions (published with the bank) |
1,1+1=?,1,2,3,4,B,#数学 #加法,#数学,,,1,,,
每个题库在同目录下有一个同名的状态文件(题库.csv.sidecar.json),保存该题库的全部使用状态:答题记录、统计、记忆卡片(FSRS)、筛选、收藏/掌握/错题、标签与分类的修改等。切换题库时各题库状态相互独立、自动恢复,不会互相覆盖。
Each question bank has a same-name state file next to it (题库.csv.sidecar.json), holding all per-bank state: answer records, statistics, FSRS cards, filters, favorite/mastered/wrong flags, and edits to tags/categories. Switching banks restores each bank's own progress automatically — no overwriting.
.bak);状态文件损坏或缺失时自动从备份恢复
State writes are atomic (temp file + rename) with a 30-minute backup (.bak); corrupted or missing state files are auto-recovered from backupdata.json 备份为 data.json.bak(如需回滚可手工恢复)
When upgrading from older versions, legacy progress is migrated automatically and data.json is backed up as data.json.bak for manual rollback.cqv 二进制产物(校验题号质量,可附一句备注),随产物分发
Settings page "Optimize Bank": compile the CSV into a .cqv binary artifact next to it (ID quality validated, optional note), for distribution.cqv 设为题库路径即可使用:产物只读、解析更快、不会被误改;产物更新后状态按题号自动对齐
Consumers set the .cqv as the bank path: read-only, faster to load, safe from accidental edits; state stays aligned by question ID when the artifact is updated.cqv 与同名 CSV 的状态文件相互独立(同题库换格式 = 换状态)
The .cqv and its CSV counterpart keep separate state files (switching format = separate state)| 设置 / Setting | 说明 / Description |
|---|---|
| CSV 文件路径 / Bank Path | 题库路径(.csv 或编译产物 .cqv),下方展示对应状态文件路径 / Path to the bank (.csv or .cqv); the corresponding state file path is shown below |
| 随机题目顺序 / Random Order | 每次加载时随机排列题目 |
| 随机选项顺序 / Random Options | 每题选项顺序随机 |
| 答对自动跳转延迟 / Auto-Advance Delay | 答对后等待秒数,0 = 不自动(秒 / seconds) |
| 默认展开筛选栏 / Filter Panel Open | 打开面板时筛选栏默认展开 |
| 默认展开编辑栏 / Edit Panel Open | 打开面板时编辑栏默认展开 |
| 标记筛选默认值 / Default Filter Values | 各标记筛选的默认状态 |
| 左右滑动切题 / Swipe Navigation | 移动端面板内左右滑动切换题目(默认开启) |
| 记忆练习 / Memory Practice | 启用基于记忆曲线(FSRS)的练习 |
| 每日新题数 / Daily New Questions | 记忆练习每天引入的新题数量上限(默认 20,每题库独立配额) |
| 到期提醒 / Due Reminder | 状态栏显示今日待复习题数提醒 |
| 掌握参与评分 / Mastery-aware Rating | 掌握答对=Easy、其余=Good;收藏不参与评分(默认开启) |
| 优化题库 / Optimize Bank | 把 CSV 编译为 .cqv 产物(需面板已打开) |
| 导出修改到 CSV / Export Changes to CSV | 把状态文件中的标签/分类/重复修改写回 CSV(需面板已打开) |
| 重置刷题进度 / Reset Progress | 分项清理:仅刷题记录 / 仅记忆卡片 / 重置题目顺序 / 全部重置 |
Obsidian 设置 → 社区插件 → 浏览 → 搜索 "csv quiz practice" Obsidian Settings → Community plugins → Browse → Search "csv quiz practice"
或手动安装:将 main.js + manifest.json + styles.css 复制到 vault 的 .obsidian/plugins/csv-quiz-practice/,然后重载 Obsidian
Or install manually: copy main.js, manifest.json, and styles.css to your vault's .obsidian/plugins/csv-quiz-practice/ and reload Obsidian