我的Emacs在Windows Seven上总是显示启动错误,提示警告。

3

EDITED 2: 这个问题已经得到回答,但尚未完成,@vpit3833提供的解决方案正是我需要的。因此,请这样调用emacs:emacs -nw --no-site-file。这将抑制错误消息,并且仍然会调用.emacs。然而,我仍然无法找到错误的原因。有什么建议吗?但这次不是悬赏。

EDITED 1: 我对这个问题设置了一个悬赏,希望有人可以解决这个问题。因为当我启动Emacs时,必须手动加载文件.emacs,这相当令人烦恼。

我使用的是Emacs原生Windows应用程序。它运行得很好。但现在它不会读取我的.emacs,并且总是显示错误消息:

if: Wrong number of arguments: #[(type level message &rest args) "ÄÅÆ  
##" [type message args level display-warning apply format] 6 ("c:/Development/Tools/emacs-23.2/lisp/emacs-lisp/warnings.elc" . 8481)], 2

一切似乎都运行正常。但在安装Emacs W32和Ergo Emacs后卸载它们之后,现在Emacs原生Windows应用程序显示了这个错误。

出了什么问题?


似乎Emacs W32或Ergo Emacs没有正确卸载。您能否发布启动emacs时会出现的堆栈跟踪,例如emacs --debug-initemacs --debug-init -q?堆栈跟踪应该指向有问题的地方。 - vpit3833
好的,没问题!我会立即在这里发布它,因为它只发生在我的办公室工作站上。谢谢! - swdev
不是的。这个消息显示为:if: 参数数量错误:#[(type level message &rest args) "ÄÅÆ ##" [type message args level display-warning apply format] 6 ("c:/Development/Tools/emacs-23.2/lisp/emacs-lisp/warnings.elc" . 8481)], 2 - swdev
如果您在启动Emacs时遇到了这个错误,例如emacs --debug-init,那么很可能是因为您的~/.emacs~/.emacs.d/init.el中存在一个未正确格式化的if语句。您是否会在emacs --debug-init -q中得到不同的错误消息? - vpit3833
2
好的,default.el 可能有问题的 if。如果在你的 ~/.emacs 中添加 (setq inhibit-default-init t) 后停止出现错误信息,那么你需要找到并修复 default.el 中的有问题代码。或者,在极少数情况下,如果它(有问题的 if)在 site-start.el 中,请修复该文件(如果使用 emacs --no-site-file 命令启动可以停止错误)。在这两种情况下,我不知道 Windows 系统上这些文件的路径。 - vpit3833
显示剩余3条评论
5个回答

3
似乎是你的.emacs文件出现了错误,或者是Emacs W32或Ergo Emacs安装了某些内容到系统配置文件中,现在被本地的Emacs应用程序捕捉到了。从信息本身来看,问题可能出现在格式不正确的(if ...)语句上。
你可以通过使用-q选项运行Emacs来检查问题是否出在.emacs文件上,在Windows中,我猜你可以从“启动菜单”的“运行程序”选项中进行操作?
emacs -q

如果这样可以正常工作,那么问题可能出在你的.emacs文件中。如果你仍然遇到问题,请尝试。
emacs -Q

如果使用emacs -Q命令解决了问题,那么问题可能出在系统范围的配置文件上,但是我不确定在Windows中该文件的位置。


谢谢Tyler。-q选项无法工作。我已经暂时将我的.emacs文件移出了HOME路径,但是-Q选项可以很好地解决它。现在,我想知道是哪个系统范围的配置导致了这个问题。也许是来自我的用户目录(在Windows中有点混乱,因为每个版本都会更改)。 - swdev

3

我有同样的问题。我的情况是我保留了从EmacsW32获取的“site-lisp”文件夹以保持我的配置。这里的EmacsW32 "site-start.el"看起来像:

; ****** Added by emacsw32-setup-base at Mon Nov 01 16:16:09 2010
;; Add EmacsW32/lisp to load-path if found.

在删除了这一特定部分之后,它就能正常工作。

希望能对您有所帮助。


2

尝试显式设置HOME环境变量,指向您的.emacs文件。

我在Windows上通过批处理文件或者在Unix上通过shell脚本启动Emacs。Windows批处理文件看起来像这样:

set drive=D:
set home=u:\Oleg

set emacs_home=%drive%\Soft\Emacs
set cygwin_home=C:/cygwin
set utils=%drive%\utils
set path=%utils%;%cygwin_home%\bin;%utils%\7-Zip;%utils%\gnu-win32;%utils%\putty;%path%
set temp=d:/temp/

%emacs_home%\emacs-23.2\bin\runemacs.exe --debug-init

这样我就可以根据所使用的计算机轻松修改HOME、PATH和其他环境变量。

它不起作用。我已经尝试过runemacs.exeemacs.exe(因为我喜欢在-nw环境中运行它)。两者都仍然显示错误消息。 如果这是家用电脑,也许我会重新安装Windows。但这是办公室电脑,所以IT人员可能不喜欢我的替代方案 :) - swdev
顺便说一下,我刚刚测试了-l开关,所以要运行emacs,我使用这个命令emacs -nw -Q -l e:\.emacs。嗯,我注意到的第一件事是,在那个Dos提示符中,我的emacs可以显示浅色(所以有浅红色)。这是一个相当好的解决方案,虽然我不确定-Q开关是否足够安全。顺便说一句,我仍然为这个问题提供悬赏。因为我仍然很好奇它为什么会这样... - swdev
我添加了一点内容。那个emacs自定义设置不能保存我的自定义设置以供将来使用。这可能是因为.emacs文件没有被自动读取的原因。 - swdev
1
你尝试过更改HOME目录吗?这可能只是权限或其他问题。 - Oleg Pavliv
以前在 E:\Projects 文件夹里,现在移到了 E:\。 或许我应该试着把它移动到 C:\xxx。谢谢。 - swdev

1
我刚刚在Windows上安装了64位的Emacs(http://semantic.supelec.fr/popineau/programming-emacs.html#sec-2),并遇到了相同的错误。原来site-lisp/site-start.el中有这个不正确的elisp代码:
(lwarn "Can't find %s" lisp-dir)

查看warning.el代码,这与函数参数不匹配。我把这行改成了这样:

(lwarn '(emacsw32) :warning "Can't find %s" lisp-dir)

并且加载错误消失了。


1

我曾经遇到过相同的问题。感谢vpit3833帮助我,至少解决了我的问题。EmacsW32创建了一个名为C:\site_lisp的目录。在卸载时,它显然不会删除该目录。我实际上有多个Windows版本的Emacs。当我尝试全部使用它们时,他们都有上述相同的问题。我尝试了"emacs --no-site-file"的建议。这似乎起作用了,并指出计算机上某个地方存在一个站点文件。我搜索了一下,发现了site_lisp目录。删除这个之前不存在的目录可以帮助我重新恢复Emacs的正常运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接