mcpField
A
anki

anki

github.com/terkelg生产力49513 次安装4 周前更新
代码仓库

关于 anki

Anki Flashcard Management 是通过 `anki.sh` 脚本和 AnkiConnect 创建及管理 Anki 闪卡的技能,提供卡片格式指导,并要求添加卡片或执行敏感更改前获得用户确认。

主要功能

  1. 01通过 AnkiConnect 创建和管理卡片
  2. 02基础卡片与填空卡片的使用指导
  3. 03Markdown、数学和代码格式规则
  4. 04添加或修改卡片前确认

适用场景

  1. 01编写单一明确问答的卡片
  2. 02创建含提示或数学内容的填空卡片
  3. 03添加前审阅拟创建的卡片

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/terkelg/anki-markdown --skill anki

安装后在 Claude Code 中输入/anki确认已加载。

附带文件scripts/anki.sh

详细介绍

Anki 闪卡管理

使用 anki.sh 脚本,通过 AnkiConnect 创建和管理闪卡。

ANKI="$(dirname "$SKILL_PATH")/scripts/anki.sh"

准备工作:

  • 确保 Anki 桌面版正在运行,并已启用 AnkiConnect
  • 确保 curl 和 jq 已添加到 PATH

重要:必须获得用户批准

未经用户明确批准,绝不能向 Anki 添加卡片。

添加任何卡片之前:

  1. 完整展示所有拟添加的卡片(正面 + 背面)
  2. 询问用户是否确认:“准备好添加这些卡片了吗?”
  3. 只有在用户明确回答“是”或批准后,才能继续

这是不可妥协的要求。用户必须先检查卡片质量,再添加卡片。

对于可能具有破坏性或不可逆的操作:

  • delete:删除笔记前,先征求用户明确确认
  • update:更新笔记前,确认具体字段和 ID
  • rate:显示卡片和建议的评分,然后等待用户确认再提交

指南

  • 必须为基础卡片使用 Anki Markdown 笔记类型,为填空卡片使用 Anki Markdown Cloze
  • 正面和背面字段都使用 Markdown
  • 每张卡片只测试一项事实或一个想法
  • 问题应具体且简单
  • 问题和答案应简短、清晰、明确
  • 确保每张卡片只有一个独特且具体的答案
  • 避免在一张卡片中列出长列表或多个条目
  • 添加上下文或提示,帮助未来的自己理解
  • 如有帮助,可加入个性化示例或记忆口诀
  • 对重要概念,可以创建多张简单卡片
  • 从不同角度为重要问题创建多个变体
  • 将卡片与个人目标和项目关联,避免事实成为“孤立”信息
  • 始终为代码使用语法高亮(参见“代码片段”部分)
  • 创建多张相关卡片时,使用批量操作以提高效率

选择卡片类型

对于需要写出具体问题的问答卡片,使用 Anki Markdown(正面/背面)。 对于填空卡片,如果隐藏陈述中的部分内容比编写问题更自然,则使用 Anki Markdown Cloze(文本/补充)。

数学

使用 Anki 原生分隔符:行内数学使用 \(x^2\),独立成行的数学公式使用 \[x^2\]。审核器使用 Anki 内置的 MathJax;不要添加外部脚本或字体。不支持美元符号分隔符。对于字面上的 TeX 示例,请使用代码格式。

挖空内容可以包含公式({{c1::\(x^2\)}}),也可以出现在公式内部(\(x + {{c1::y}}\))。在数学公式内部,隐藏的挖空内容会显示为 [...] 或带方括号的 TeX 提示。显示答案时不会应用挖空样式,::blur 会使用 [...]。若要模糊整个公式,请将挖空放在数学分隔符之外:{{c1::\(x^2\)::blur}}。

隐藏内容后,剩余的 TeX 仍须有效。在 \begin{aligned} 之后添加 {},以防提示被解析为可选参数。

相邻的 TeX 右花括号之间要加空格;如果挖空内容以 } 结尾,则在挖空闭合符 }} 前加空格。例如:\(x + {{c1::\frac{1}{\sqrt{2} } }}\)。这样可以让 Anki 正确识别挖空边界;TeX 会忽略这些空格。

挖空卡片

填空卡片使用 Anki Markdown Cloze。字段为 Text 和 Extra。

语法

三种形式:

  • {{c1::answer}} - 正面显示 [...]
  • {{c1::answer::hint}} - 正面显示 [hint]
  • {{c1::answer::blur}} - 正面显示模糊内容(显示形状,但不显示文本)

挖空内容中支持完整的 Markdown:粗体、斜体、高亮、带语言标签的行内代码、链接、图片、代码块和表格。

多张卡片

每个挖空编号(c1、c2、c3……)都会生成一张单独的卡片。使用不同编号,从同一条笔记中测试不同事实:

{"Text": "{{c1::HTML}} provides structure, {{c2::CSS}} provides style."}

这会生成 2 张卡片。卡片 1 隐藏“HTML”,卡片 2 隐藏“CSS”。

多次使用相同编号会在同一张卡片上隐藏所有对应内容:

{"Text": "{{c1::React}} and {{c1::Vue}} are frontend frameworks."}

这会生成 1 张卡片,同时隐藏“React”和“Vue”。

共享删除

逗号分隔的填空编号仅适用于 Anki 桌面版 26.05 或更高版本。它们会在多张卡片上隐藏相同的文本:

{ "Text": "The {{c1::CPU}} and {{c2::GPU}} both execute {{c1,2::instructions}}." }

此笔记会生成两张卡片。卡片 1 会隐藏“CPU”和“instructions”。卡片 2 会隐藏“GPU”和“instructions”。

嵌套填空

填空删除可以嵌套。外层填空会隐藏所有内容,包括内层填空:

{"Text": "{{c1::Canberra was {{c2::founded}}}} in 1913."}

卡片 1 会隐藏“Canberra was founded”。卡片 2 只会隐藏“founded”。

填空中的行内代码

带有语言标签的行内代码可以在填空中使用。请注意,当代码使用 {lang} 语法时,需要使用三个右花括号(}}}):

{"Text": "Use {{c1::`querySelector()`{js}}} to find DOM elements."}
Extra 字段

每张卡片的背面都会显示 Extra 字段。可用它提供背景信息、示例或参考资料。该字段支持完整的 Markdown,包括代码块和提示框。

填空示例
# Basic cloze
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"The {{c1::CPU}} executes {{c2::instructions}}.","Extra":"Basic computer architecture."}' --tags "cs"

# Cloze with hint
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"{{c1::JavaScript::language}} was created in {{c2::1995::year}}.","Extra":"Created by Brendan Eich."}' --tags "history"

# Cloze with blur
$ANKI add "MyDeck" "Anki Markdown Cloze" '{"Text":"The speed of light is {{c1::299,792,458 m/s::blur}}.","Extra":"Often approximated as 3 x 10^8 m/s."}' --tags "physics"

Front 字段格式

在正面使用 Markdown,突出问题涉及的关键术语:

  • 使用 粗体 或 ==highlight== 标出要考查的主要概念
  • 使用行内代码标记技术术语、函数或语法

示例:What does **vertex_index** return in WGSL?

Back 字段格式

Back 字段使用以下格式:

  1. 用一句粗体文字直接回答
  2. 空行
  3. 补充背景信息,使用常规文本(可选)
便于快速浏览的格式
  • 使用 ==highlighted== 让关键术语一目了然
  • 使用 粗体突出说明中的关键概念
  • 为所有代码块(包括行内代码)启用语法高亮
  • 优化格式以便快速浏览,让读者能立即掌握核心要点
键盘快捷键

使用 <kbd> 标签标记键盘按键:

Press <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd> to open the command palette.
代码片段

始终使用语法高亮:

  • 围栏代码块:使用三个反引号并指定语言(js、python、```rust 等)
  • 行内代码:使用 `code`{lang} 语法(例如,`const x = 1`{js})

高级功能:

  • 行高亮:使用 ```js {2} 高亮第 2 行
  • 单词高亮:使用 ```js /pattern/ 高亮指定单词
  • 专注模式:添加 // [!code focus] 注释以聚焦指定行
提示框

重要说明可酌情使用 GitHub 样式的提醒:

> [!TIP]
> Brief helpful insight here.

> [!NOTE]
> Useful context the learner should know.

> [!WARNING]
> Common mistake or gotcha to avoid.
示例
Front: What does `passEncoder.draw(3)`{js} do with **no vertex buffer**?
Back:

**Invokes the ==vertex shader== 3 times.**

The shader uses `@builtin(vertex_index)`{wgsl} to generate positions ==procedurally==.

> [!TIP]
> Useful for fullscreen quads without geometry data.

常见操作

通过 $ANKI <action> [args...] 运行:

操作描述示例
sync触发 AnkiWeb 同步$ANKI sync
decks列出牌组$ANKI decks --stats
models列出笔记类型$ANKI models
fields查看模型的字段$ANKI fields "Anki Markdown"
find搜索笔记$ANKI find "deck:Spanish tag:verb"
info查看笔记详情$ANKI info 1234 5678
add添加一条笔记$ANKI add "My Deck" "Anki Markdown" '{"Front":"Q","Back":"A"}' --tags "t1 t2"
add-bulk添加多条笔记$ANKI add-bulk "My Deck" "Anki Markdown" '[{"Front":"Q1","Back":"A1"}]'
update更新字段$ANKI update 1234 '{"Front":"New Q"}'
delete删除笔记$ANKI delete 1234 5678
due获取到期卡片$ANKI due "My Deck" --limit 5
review显示卡片$ANKI review 1234
rate为卡片评分(1-4)$ANKI rate 1234 3
tags列出标签$ANKI tags --pattern "verb"
典型工作流
$ANKI sync                          # sync first
$ANKI decks                         # check available decks
$ANKI models                        # verify required model exists
$ANKI fields "Anki Markdown"        # verify field names for selected model
$ANKI find "deck:MyDeck front:test" # check for duplicates
$ANKI add "MyDeck" "Anki Markdown" '{"Front":"...","Back":"..."}'
$ANKI sync                          # sync after changes

评论

支持 Markdown