自带 JS 模式报错 Eval error in the c-lang-defvar

我用 Emacs 27,自己从 git 编译的,每次一打开一个任意 JS 文件就会报错,Emacs -Q 也这样:

Eval error in the c-lang-defvar' or c-lang-setvar’ for font-lock-comment-end-skip' (fallback source eval - js-mode compiled with CC Mode 5.34 but loaded with 5.34.1): (error "c-font-lock-comment-end-skip’ got no (prior) value in js-mode (might be a cyclic reference)") [2 times]

目前就是烦人,不知道具体有没有影响。有没有小伙伴遇到同样问题?知不知道报错里提到的 CC Mode 版本是怎么回事?

1 个赞

试了一下,我的没有问题,我编译的是 master commit 75bb40b163cdc4a5fffa873c1b430dc222f921ee

我是从 Emacs Mac 大约最新的 work 分支编译的,不知道重新(一个干净的环境)编译有没有帮助,等有机会重新 clone 编译试试。

emacs-version
;; => "27.0.91"

emacs-repository-branch
;; => "work"

emacs-repository-version
;; => "b71b8b1e831adac24490706a9085ee9a9954fdbd"

应该是某些lisp没有重新编译,我删除elc后重新编译解决的

哦,我等下试试 make clean && make。

印象中make clean不怎么好用

果然,我试过了 make clean && make,还是同样问题。随后又重新 clone 没这个问题了。

make distclean 更彻底。

clean 只清除 build 产生的文件,distclean 把 configure 产生的文件也一并清除。

也可以用git clean,也很彻底,不过具体命令忘了

我只知道:

  • git clean -fd 删除所有 untracked 文件。
  • git restore --source=HEAD --staged --worktree . 丢弃所有未提交的修改。
  • git checkout . 同上。

但 configure/make 生成的目标文件不受影响,因为它们都被 .gitignore 规则排除了。

不记得当时看的具体命令是啥了,但是有-x,大概是

git clean -xdf

-x就会无视gitignore。