为了表示方便,假设将 org-roam-directory
设置为 “~/org/” 。
org-roam 默认会将数据库文件保存为 “~/org/org-roam.db”,但我偶然发现 “~/org/roam/org-roam.db” 也生成了结构相同的数据库,于是为了避免重复,就将 org-roam-db-location
设置为它了。
然后,我就发现每次重启 emacs,所有的 org-roam 文件索引都会完全丢失,表现为 C-c n r f
时,弹出的列表中没有任何文件。就算运行 org-roam-db-build-cache
指令,也无法找到。在使用过程中,当前编辑的 org 文件有可能会被添加到索引中。
后来发现,无论是否设置变量 org-roam-db-location
,"~/org/roam/org-roam.db" 总是会生成,而且总是空的数据库,不知道 org-roam 生成这个东西是干什么的。猜测这个数据库是 org-roam 初始化时生成的垃圾文件,在生成数据库结构后会将这个文件复制到工作位置。而每次启动都会进行初始化导致该文件内容丢失。
最终,取消了 org-roam-db-location 配置,让其自然创建在 “~/org/” 目录之下,一切正常。
刚开始不知道这个原因,浪费许多时间去搜索,然而没有任何资料,难受。
1 个赞
我遇到过这个问题,配置是基于doom
的。问题的根源是org-mode
的loading的问题。默认org-roam
会随org
的load一起load。然后org-roam
在load的时候会直接读org-directory
的值来设置org-roam-db-location
,然后roam
发现指定的位置没有数据库,就建了一个空的。你的org
的配置一般是用with-eval-after-load
之类的东西确保load之后得以运行。此时org-directory
被设置成了你自己设置的值,然后org-roam-db-location
也被同时更新(更新到(concat org-directory "/org-roam.db")
)。但因为之前建过空的数据库了,所以roam
认为现在的org-roam-db-location
应该能找到数据库,结果发现没有,所以导致了这个问题。
我的解决方案是二分了一下自己的配置,发现出问题的配置是一行use-package
。涉及的具体package我记不得了,但肯定是跟org
有关的。最后在use-package
里加了一行:defer t
,解决问题。核心原因就是不要让org-roam
被提前load。
1 个赞
我用的也是 doom emacs,可能就是你所说的原因。
不过我的配置是在 ~/.doom.d/init.el
中启用
(doom!
;; ...
(org +roam)
;; ...
)
有什么办法配置它吗?在哪里找 use-package?
不是说doom
本身的配置,而是你自己的配置文件里,有没有正确设置org-directory
,有没有正确设置org-roam-db-location
。最重要的是有没有load/require/use-package任何可能load org
的包,如果有,需要把它改成lazy-loading。
既然是基于doom,那么最简单的就是在packages.el
里加一句(unpin! org-roam)
。
因为是org-roam
出问题,就该在org-roam
这里解决嘛,不应该影响到其他包的加载,万一因为这个:defer t
出现别的问题呢
EDIT: 以上是一派胡言
这个和unpin!
有什么关系……unpin!
只能保证装org-roam
的时候能装到最新版(我没用过unpin!
,如果文档理解错了请指正)。问题不是org-roam
,而是org-roam
的配置的一些代码在doom
的关于org
的配置运行之前被执行了
我遇到了类似的问题, 怎么改都不work…
正在用笨方法 直接抄Jethro Kuan的配置, 打算一点点改看什么地方出的问题
Jethro是org-roam的作者, 他也是用的doom emacs dots/.doom.d at master · jethrokuan/dots · GitHub
然后我发现Jethro 没有在init.el里用doom! (org+roam)的方式, 而是在package.el用 package! org-roam 来声明org-roam的
tyr
10
读取的应该是org-roam-directory
吧,不是org-directory
,如果真是这个逻辑,使用的是use-package
加载的话,那么应该不用:defer t
,而应该是用:init (setq org-roam-directory "~/org" org-roam-db-location "~/org/roam/org-roam.db")
保证在org-roam
加载之前org-roam-directory
和org-roam-db-location
已经正确设置了。