在Emacs表现不理想的情况下,我该怎么做才能解决问题?我可以采取哪些步骤自己找到并解决问题?
或者,如果失败,我如何收集有用的信息,以便此处的人(或在邮件列表或其他论坛上)可以帮助我解决问题?
我的Emacs包含许多程序包,从Internet上复制并粘贴(或杀死并重载)的摘要的集合,以及我自己的自定义elisp,其中一些我不记得写或不再理解。有没有办法弄清楚所有这些并发症?
在Emacs表现不理想的情况下,我该怎么做才能解决问题?我可以采取哪些步骤自己找到并解决问题?
或者,如果失败,我如何收集有用的信息,以便此处的人(或在邮件列表或其他论坛上)可以帮助我解决问题?
我的Emacs包含许多程序包,从Internet上复制并粘贴(或杀死并重载)的摘要的集合,以及我自己的自定义elisp,其中一些我不记得写或不再理解。有没有办法弄清楚所有这些并发症?
Answers:
emacs -Q
您需要做的第一件事是运行emacs,而无需进行任何自定义。如果您可以在原始Emacs中重现该问题,则实际上可能是Emacs本身的错误。这种情况很少见,但我们首先将其排除在外。
如果您从命令行中使用-Q
标志(即)启动Emacs,则将emacs -Q
获得裸evans或“原始” emacs,并且未加载任何本地定制。您的问题仍然存在吗?如果是这样,请跳至“提供错误食谱”。
如果您的问题是特定于某个软件包的,那么显然,如果不加载该软件包,您将无法重现该问题。但是您只想加载相关的软件包,而不是全部配置。为此,请emacs -Q
再次运行,并准备以下简短脚本:
(require 'package)
(setq package-load-list
'((package1 t)))
(package-initialize)
用package1
您要加载的软件包的名称替换。如果需要加载多个软件包,请相应地修改脚本:
(require 'package)
(setq package-load-list
'((package1 t)
(package2 t)
(package3 t)))
(package-initialize)
要加载此代码,可以将其粘贴到*scratch*
缓冲区中,然后调用M-x eval-buffer
。(或任何缓冲区,只要其中没有任何其他代码!)。
至此,您已经加载了软件包,并且仅加载了要测试的软件包。如果您现在可以重现该问题,请跳至“提供错误配方”。
.emacs
现在,您已经确认问题出在您的配置中(“呼叫来自内部!”)。您的配置可能长达数千行,并可能加载许多不同的文件。为了找到问题,您将进行二进制搜索,一次注释掉一半的代码以缩小范围。1个
emacs
,无需-Q
选择。~/.emacs
或者.emacs.d/init.el
,如果你不能找到它尝试C-h v user-init-file
)C-space
要设置标记,请向下滚动一半以扩展区域M-;
并保存文件emacs
(您的测试emacs),使第一个emacs运行。测试emacs将读取您的配置的简化版本。undo
使用注释C-/
,然后注释掉剩余代码的一半。打开一个新的测试emacs,然后重试。当然,如果您的问题出在特定的程序包上,则必须保留注释该程序包的代码。
如果您的配置文件加载了其他文件,您可能最终也会将搜索范围扩展到这些文件。
此时,您可能已经发现问题是由于仅一行或两行代码所致。您甚至可以自己修复它。如果是这样,那么恭喜,您已经学到了一些东西!否则,请继续执行第三步。
在这一点上,您应该能够提供详细的错误配方以在此处发布。它应包括:
M-x emacs-version
例如,我可能会发布这样的问题:
我对超级模式有疑问。当我使用时
M-x sm-compile-code
,它会从我的PayPal帐户中提款。重现步骤:
加载超级模式:
(require 'package)
(setq package-load-list
'((super-mode t)))
(package-initialize)
- 使用打开一个新文件
C-x C-f my-code
- 输入一行代码:
10 goto 10
- 呼叫
M-x sm-compile-code
我希望这可以调用超级编译器并编译我的程序。取而代之的是,我在微型缓冲区中看到一条消息:“ $ 100从Paypal转移到超级模式作者”
GNU Emacs 25.1.50.3
Debian Linux
超模式版本3.1415
1将错误猎人包可以帮助你用这个,(半)自动平分你的init文件。
emacs -Q
。我将其写为将这些问题链接为新用户的常规帮助的内容。