Anki 与 Obsidian 联动
参考:
Obsidian_to_anki
从一个 Obsidian 笔记中寻找特定的格式,并读取到 Anki 中。
源码修改
目前,为了适配自己的更新需要,对 Obsidian to Anki 插件进行了修改。
在原始 Obsidian to Anki 的实现中,同步会对其他未提及的字段清零。为了让插件更新指定的字段,而不修改其他的字段,我们需要修改它的 Javascript 代码。
在插件目录 .obsidian/plugins/obsidian-to-anki-plugin 中,打开文件 main.js。可以注意到,几种 AbstractNote 的继承类的 .getFields 方法实现为:
getFields() {
let fields = {};
for (let field of this.field_names) {
fields[field] = "";
}
for (let line of this.split_text.slice(1)) {
[line, this.current_field] = this.fieldFromLine(line);
fields[this.current_field] += line + "\n";
}
for (let key in fields) {
fields[key] = this.formatter.format(fields[key].trim(), this.note_type.includes("Cloze") && this.curly_cloze, this.highlights_to_cloze).trim();
}
return fields;
}
函数内的第一个 for 循环将所有字段置为空字符串了,正因为此,更新会将未提及的字段清空。我们只需对插件做少量修改,就可以使得它不再更新空字符串:
getFields() {
let fields = {};
// for (let field of this.field_names) {
// fields[field] = "";
// }
for (let line of this.split_text.slice(1)) {
[line, this.current_field] = this.fieldFromLine(line);
if (!fields.hasOwnProperty(this.current_field)) {
fields[this.current_field] = "";
}
fields[this.current_field] += line + "\n";
}
for (let key in fields) {
fields[key] = this.formatter.format(fields[key].trim(), this.note_type.includes("Cloze") && this.curly_cloze, this.highlights_to_cloze).trim();
}
return fields;
}
BEYOND THE ARTICLE
读完了,有什么想法?
阅读已保存的问答示例,并循着引用回到原文。
— 本文完 — 返回文章列表