调用某函数会报错,但是将该函数重新eval之后就能正常运行

目前在用doom-emacs,现在有一个奇怪的问题,怀疑是升级doom版本之后发现不合适又退回导致的,因为之前没有这个问题。


问题表现如下:

首次打开的emacs,直接调用函数X会报错,一般会定位到X调用的一个内部函数Y运行出错。但是将报错的函数Y重新eval之后就能调用函数X。

例如直接调用org-ref-link-message,会报错

Error running timer ‘org-ref-link-message’: (wrong-type-argument integer-or-marker-p nil)
Error during redisplay: ((lambda (window object position) (when org-ref-show-citation-on-enter (save-excursion (goto-char position) (let ((s (org-ref-format-entry (org-ref-get-bibtex-key-under-cursor)))) (with-temp-buffer (insert s) (fill-paragraph) (buffer-string)))))) #<window 3 on podcasts-note.org> #<buffer podcasts-note.org> 664) signaled (wrong-type-argument integer-or-marker-p nil)

定位到是org-ref-get-bibtex-key-under-cursor函数报错,eval org-ref-get-bibtex-key-under-cursor之后调用org-ref-link-message正常

例如直接调用yankpad-insert会报错:

org--property-local-values: Wrong type argument: stringp, nil

定位到是yankpad-category-marker 这里报错,eval yankpad-category-marker 之后调用yankpad-insert正常


已经尝试过doom build、doom sync,都没有效果。恳请指教!

彻底删除相关包的文件,重新下载。

感谢,只是删除了repo再doom build、sync还是不起作用。

最后是把整个.emacs.d删除之后重新git clone,doom install才解决的。

总结一下,除了doom自身的bug,一些奇奇怪怪的问题可有以下简单粗暴的解决方案:

  1. doom build、sync
  2. 删除package build之后的内容,doom build、sync
  3. 删除package repo和build之后的内容,doom build、sync
  4. 把整个.emacs.d删除之后重新git clone,doom install

欢迎大家补充