use-package设置延迟启动失败了

有如下的配置,设置当执行consult-recent-file时加载recentf包,执行(recentf-mode t)

(use-package recentf
  :commands consult-recent-file
  :custom
  (recentf-max-saved-items 300)
  (recentf-auto-cleanup 'never)
  :config
  (recentf-mode t)
  )

另外还有配置,给consult-recent-file绑定了快捷键

(evil-define-key '(normal visual motion) 'global (kbd "<leader>rr") 'consult-recent-file)

但是当我按,rr的时候会提示如下

consult-recent-file: No recent files, ‘recentf-mode’ is disabled

这是为啥呢? 我的完整配置在这里 https://github.com/heheda123123/emacs.d/blob/main/init.el

不为啥, (recentf-mode t) 不该延迟启用,所以不要放在 :config 块里。

这样可以了,启动的时候不加载recentf-mode

(evil-define-key '(normal visual motion) 'global (kbd "<leader>rr") (lambda() (interactive) (progn (recentf-mode t) (consult-recent-file))))

应该放:init

咦,我的理解,执行一个模块中函数的过程如下

1 把模块路径加入load-path
2 require这个文件,会加载文件中的函数和变量,全局符号表有了函数名和变量名
3 执行函数

use-package的话,init中指定的代码应该是在第二步前执行,config应该是第二步之后才执行。

如果放在init里面,还没有require recentf。全局应该没有recentf_mode这个符号吧。(这里不考虑emacs内置加载的包)

不好意思,你理解的是错的,recentf-mode 就是 emacs 內置的包里的函数,还是 autoload 的,打开 emacs 不加載任何配置就有定义,当然这个定义是个 autoload definition,执行时自动加载 recentf 包。

而且,不在启动时开启 recentf-mode,那么在 recentf-mode 没启动前打开的文件都不会有记录,用 consult-recent-file 就没有意义了。所以不推荐你这么瞎琢磨。

1 个赞

直接展开use-package看看就知道了。不是所有都需要require才能调用。 @LdBeth 已经解释我就不重复了