千呼万唤始出来:anki.el,Anki Emacs 客户端,你的 Emacs 终极语言学习助手。

认识我的朋友也许知道我是一个语言爱好者,爱学习语言的朋友肯定知道Anki,现在,我开始了Emacs客户端的移植,目前已经有初步的成效。

首先,现在还是非常初步的版本,v0.1。

暂时只有:

  • Anki Cards Browser
  • 切换 deck
  • 查看 Card
  • 播放音频
  • 可以跟 shrface,用 org 的样式来显示 card 的内容。后续版本再推配置的方法。
  • 可以配合懒猫大神的 sdcv 打造 Emacs 学习一体化环境

欢迎试用。

16 个赞

厉害,希望能登录账号同步,那样就可以抛弃 desktop 版本了。

就目前来看,登录实现起来不容易。但是其实,有本地数据库就足够,可以用各种云来同步,无需登录。

现在只读数据库,并没有写,暂时只能做浏览器使用。写这一部分比较慎重,因为暂时除了官方客户端之外,好像没有别的可靠的更新anki数据库的工具,更新数据库需要参考anki官方客户端的实现方法。或者使用anki connect,但是anki connect的速度太慢,我还是比较偏向于直接更新数据库。而且还要考虑是否要结合原有的org-drill来使用。

大家知道有可靠的更新anki数据库的方法的话,欢迎告诉我。

执行 anki-browser 报错了


json-read: JSON readtable error: 2

anki-collection-dir 找不到和你例子里一样的路径 我设置的路径内容看起来是这样的 image

anki-collection-dir 设置这个 path 对吗

支持,用anki有3、4年了,老早就希望着能有anki.el。

不过目前只能浏览的话感觉有点鸡肋了,期待后续版本。

1 个赞

路径对的,但是数据库被锁了,要关闭官方Anki客户端,不能同时打开。

我之前做过一个假名学习软件,kana,我打算也弄成那样。等我定好了数据库的更新方法,就很容易了。

1 个赞

所以真的不考虑anki connect了吗?

这个是必须的吗?这样的话像online dictionary helper等外部插件就不能用了。

先赞后看 :+1:

也不一定,暂时是,因为数据库如果同时读写是会有问题的。暂时的方法是,先用anki.el读一次数据库,然后打开anki客户端,这样子不会有问题。

但是目前只是读一次数据库,如果数据库更新了,目前还没有重读的机制。目前还在测试中。

anki connect也会考虑。

最新的commit解决了,复制数据库到临时文件夹,然后再读取,就可以了。

刚看了anki connect是最简单的方法,也是最稳定的方法,它提供了远程答题的功能。我想,这已经足够了。但是,要开启anki在后台。

以下的anki是特指官方的anki客户端,anki.el是Eamcs的anki客户端实现。

刚想到了一个全新的思路: 我用了anki很长的一段时间,说实在,它就两个比较实用的功能:

  • 有大量的deck资源
  • 记忆算法(SM2 algorithm)

但是,用了一段时间后发现有很多缺点:

  • 每次导入导出都花费大量时间,用户生怕导入导出数据的丢失,特别是学习记录的丢失
  • 数据同步也是非常的麻烦,当数据库越大,同步就越困难,用户浪费大量的时间去维护数据库的同步
  • 数据和学习记录都放在一个数据库里面(collection.anki2),没有做到完全的分离,每次学习,都会修改整个数据库
  • 学习起来并不高效,花了大量的时间在Anki本身,而不是学习本身(然而Anki并不是Emacs)

既然如此,不如反过来想,用anki管理deck和cards,而用emacs进行学习?

  1. 官方的anki提供deck资源,完全抛弃anki的学习功能,官方anki只用来管理资源。
  2. 学习功能,用org-drill来取代,org drill的学习功能比anki强大多了,还可以充分利用Emacs的强大org功能,实现高效学习。
  3. 同步就更简单了,直接放在云端多端同步就行(经过我研究发现,其实就是一个collections.anki2文件,和一个collection.media文件夹,其他文件都是没用的,你甚至不需要用Anki的导入导出功能)

这样实现起来,不但不需要用Emacs去硬生生去迁就Anki的数据库格式,而且更简单和实用。

欢迎大家提出更多宝贵意见~

3 个赞

我使用 anki 的时间不算太长,我发现 anki 最大的好处除了你说的大量deck资源外,还有就是插件功能。我本身用欧陆字典查词,平板,手机,电脑都可以查,然后用 anki 插件自动同步到anki(省去了新建卡组的时间),同时可以同步手机的anki,利用碎片时间进行学习。

整个工作流自然,不需要花费太多额外的时间,兼顾了学习效果和投入时间。如果用 Emacs 学习,感觉很难做到移动端,非常不方便利用碎片时间。

我的想法是利用 org-capture 把需要记录的内容抓取到 Emacs 然后利用 org drill 生成card,再自动同步到 anki,然后跟 anki的生态无缝对接,这样可能比较好。

1 个赞

我目前的做法就是这样,用的是 anki editor

楼主是自己实现客户端,anki editor 是把 org 导入到 anki 桌面客户端里。

恩,我知道楼主是 anki 客户端,只是我觉得一直在emacs里面学习anki card有点不太好,无法有效利用碎片时间进行学习。 Emacs对于我更多的是生产力工具,而不是学习工具。

原来如此,我以前也是用移动端的Anki多,断续在坐车的时间用了几年时间,也就是用手机来碎片化学习,明明我也背了很多单词了,英语还是没有太大的进步,我反思了很久,可能是因为这本身就是死记硬背,没有太高效的原因,而且学到的东西没有应用,根本没有消化成内在。

所以,我放弃用anki了。但是,一直没有找到好的学习方法。

有些人可能跟我一样,我想法是用Emacs来做终身学习,我想我的学习记录可以在Emacs里面管理。

1 个赞

这个可能跟你用什么工具没什么关系,我觉得碎片化时间就不适合用来学习,之前看了一个现代化人机交互设计的演讲,提到了一个研究,人一旦注意力被打断,想要重新找回注意力平均需要23分钟。