有如下的配置,设置当执行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))))
咦,我的理解,执行一个模块中函数的过程如下
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 已经解释我就不重复了