[求助] org-roam 在Windows下每次启动都重新建立索引一遍

org-roam 启动的时候配置 了 org-roam-db-autosync-mode 每次从新启动的emacs 的时候再执行都会重新索引一遍org-roam-directory 可是我在关掉emacs的之后并没有再动这个文件夹下面的东西,


(use-package org-roam
  :ensure t
  :defer t
  :config
  :bind
  (("C-c n f" . org-roam-node-find)
   ("C-c n i" . org-roam-node-insert)
   ("C-c n r" . org-roam-node-random))
  :custom
  (org-roam-directory (file-truename "~/.emacs.d/learning/emacs/org_roam/org-roam"))
  (org-roam-capture-templates
   '(("d" "default" plain "%?" :target
      (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
      :unnarrowed t)))
  )


你试试这个呢?我这用的很好。

(add-hook 'after-init-hook 'org-roam-db-autosync-enable)

实在Windows下面吗,Linux下没有这个问题, 这条命名在Windows下执行的过程中会被卡死 ,你说的这种方法我试过 ,导致的结果就是emacs的启动时间从3秒变成了17秒

Linux 和 Macos 下没有问题,我都是用的这个。。。windows上,不知道,我己经放弃在windows 上使用 Emacs了,体验不好,反应慢。

1 个赞

你可以尝试使用下这个包,on。它提供了on-first-find-file-hook,这样就只会在你打开文件的时候执行org-roam-db-autosync-enable。不要使用 after-init-hook,这样就不会影响emacs的启动了。

2 个赞

哪个包? 我猜您的解决办法还是必须执行org-roam-db-autosync-mode 的,只要这个函数执行必定要花费长达10几秒的时间,我看相关的讨论还会随着节点的上升不断时长增加 org-roam有一个逻辑,就是检查是否文件下下面的文件产生了更改,如果是则更新sqlite ,否则直接启动,我现在的想法是,如果是在Windows环境下,干脆就不检查了,直接更新

那个包的名字就叫on,你只能自己试试。

我一直在 Windows 下用 org-roam,一切正常。

其中 (org-roam-database-connector 'sqlite-builtin) 需要 Emacs 29,可以忽略。

你可以参考下我的设置:

请问您的 (org-roam-directory (file-truename “~/.org/org-roam”)) 这个配置在git 的控制下吗?

这样 来看能用的只有这一个配置(org-roam-db-gc-threshold most-positive-fixnum) 我也尝试了,用途不大

你的启动慢可能跟org 有关,不仅仅是 org-roam, 你可以看下emacs 启动都加载了哪些包,org 中有些包会导致 emacs 启动很慢。

这个是用 git来控制,不同平台之间共享。
org 在 Windows 平台启动慢是正常的,因为要加载一堆模块。 我是设置了这个 (setq org-modules nil),就可以不加载那些模块,可以缓解一些。

绝对不是,我做过这样的测试,关了autosync 然后再执行打开,还是慢,很慢,一样的慢

这个解决了我长久依赖的另外一个问题,谢谢

但是我还是认为和org 的载入无关,因为我尝试过在载入所有的org package之后在执行 ,还是很慢

因为你用了懒加载,第一次加载 org-roam 就是慢的,在Windows 系统这样问题更加突出而已。 如果第一次加载org-roam 的时候,你从来没加载过 org mode,加载 org mode 的时间叠加在一起,就更慢了。

我现在用 Emacs 29 ,org-roam 使用内置的 sqlite实现,要好一些,但还是慢。反正就慢一次,无所谓了。

如果想快,就用 Linux 或者 WSL

用 benchmark-ini 或 esup 测下包的加载时间不就知道了吗

一样的问题, org-roam第一次加载扫描数据库的速度太慢了, 可能只有emacs 29里提供了更好的sqlite的包才能解决.