没有 --debug-init 启动看提示么?
谢谢懒猫!这个确实很困扰,很多人反馈问题描述不清晰,也没有排除过原因。总结下来,绝大多数都是个人配置问题或者环境问题。emacs -Q是第一步,还有描述问题一定要清晰,否则浪费大量时间。提问之前可以想想,如果我是作者,这些描述能解决问题么~~~ 这跟码农们天天抱怨QA是一样的道理
这个确实是,怎么就忘记了呢
emmm, 怎么感觉是因为我才
不是的哈, 和你没关系。
很久以前就想给论坛增加 emacs -Q 的提示了, 只是前两天读 Discourse 的文档才发现最终怎么弄回复模板。
文本框 Placeholder 很容易被忽视。
如果可以像 Github 那样定制发帖指引、预置问题模板,论坛会有序很多。
懒惰是人的天性,主观视角(不换位思考,不为看问题的人着想)是惯性。没有模板,很多人会倾向自由发挥,书写不按条理。有了模板,在【删除模板】和【按模板要求填写】之间,我相信大部分人会选择后者。
Discourse 其实也有个很弱鸡的模板,可以针对每个 Category 设置一个模板,但是问题明显:
- 如果先输入内容,再选择 Category,就看不到模板。
- 一个 Category 只能设置一个模板不够用,例如 Emacs-general 不会只有求助帖。
emmmm:rofl:
论坛又不是Github 的Issue有必要这个吗
本论坛显然承担了大量答疑解惑的任务。要不然楼主也不会发这个贴。
不管在哪里,提问者都有责任把问题交待清楚。
有求于别人,就该多站在别人的角度想一想。
不要认为别人回答问题是理所当然。
不要认为别人看懂问题是理所当然。
如果没有这点意识,我不客气的说,就是巨婴。
主帖第一张图,“电子邮件……绝不会向公众显示”
显示自己的当然没问题(
提一下一个emacs 29的小技巧,最近emacs master分支给emacs加入了 --init-directory
选项,例如,可以让用户可以在 ~/emacs-dummy
(当然这个路径在哪里叫什么名字都无所谓,随你) 开个新配置,然后用 emacs --init-directory ~/emacs-dummy
启动emacs,emacs就会使用 ~/emacs-dummy
路径下的配置,用来debug非常方便,chemacs2之类的可以退役了。
参考: emacs/NEWS at a03d7630f133d08b457a6d08b9ce2050566800ff · emacs-mirror/emacs · GitHub
如果 debug 配置不是太复杂,不想创建 dummy 目录,可以用我这个脚本:GitHub - twlz0ne/emacsq-sh: Helper script to run `emacs -Q`
直接在命令行上写配置,即用即弃。
另外,如果你使用 Doom 而不使用 Emacs 29,那贴心的 Doom 已经把这个功能 backport 过去了,doom 用户即使在 emacs 27/28 上也可以用 --init-directory
:feat: backport --init-directory for 27/28 users · doomemacs/doomemacs@5108ffc · GitHub
新手总是问一些基本的错误 “遇到错误 xxx, 怎么办?"
我今天给论坛输入框加入了更多提示
为提高大家的交流效率, 请反馈问题之前先自我排查, 以下是排查方法。
排查是否是因为自己配置文件引起的问题:
1. 用 emacs -Q 启动 Emacs
2. 只加载测试插件和最小配置
3. 如果 emacs -Q 启动没有问题,请使用二分注释法排查自己的配置代码
排查Emacs启动时就报错的问题:
1. 用命令 emacs --debug-init 启动Emacs
2. Emacs会在启动时报错告诉你报错位置和调用堆栈
3. 如果第二步看不懂, 请截图Emacs报错到论坛
排查Minibuffer的报错:
1. 请执行 M-x toggle-debug-on-error 命令
2. 再次执行你触发错误的操作, Emacs会告诉你报错位置和调用堆栈
3. 如果第二步看不懂, 请截图Emacs报错到论坛
排查输出消息的命令:
1. 你在Minibuffer看到某种 message 但没有报错, 此时可以通过在 ielm 中执行代码 (setq debug-on-message "xxx")
2. 当Emacs输出 xxx 时, Emacs 就会启动 debugger ,告诉我们哪行代码输出了消息
3. 通过分析第二步堆栈信息, 你可以定制Emacs的行为, 避免输出不必要的消息
希望定制某个函数的行为, 但却不想改插件源代码, 请善用 advice:
1. 学习连接在 https://www.gnu.org/software/emacs/manual/html_node/elisp/Advising-Functions.html
希望在加载某个模式时执行某些代码, 请善用 hook:
1. 学习连接在 https://www.gnu.org/software/emacs/manual/html_node/emacs/Hooks.html
希望大家求助前先自助, 老手的时间很宝贵。
论坛输入框增加了 profiler-start 和 profiler-report 的用法, 方便告诉那些不知道用这两个命令排查性能问题的新手。
在Minibuffer看到某种 message 但没有报错, 此时可以通过在 ielm 中执行代码 (setq debug-on-message “xxx”)
学到新知识。↑
我排错最常忽略的情况是,配置是对的,但 .elc / .eln 是旧的,以前不懂的时候只能靠运气解决。如果在配置头部加上 (setq load-prefer-newer t) 应该能解决?
捉两个虫:
- “rebuilder” → “re-builder”
- “interaction-log” 是第三方包,要主动安装。
错误已经更新, 感谢反馈。
(setq load-prefer-newer t)
会有一点点的额外时间消耗,所以我自用的方案是保存时自动重新编译
(defun auto-recompile-file-maybe ()
(when (and (fboundp 'vc-root-dir)
(string= (vc-root-dir) user-emacs-directory))
(byte-compile-file buffer-file-name)))
(defun add-after-save-hook ()
(add-hook 'after-save-hook 'auto-recompile-file-maybe nil t))
(add-hook 'emacs-lisp-mode-hook #'add-after-save-hook)
之前使用的 auto-compile
中的 auto-compile-on-save-mode
,挺方便的。但我使用 1s 自动保存文件,一保存就会报错。即使修改完了,那个 compile 错误提示框还会一直保留,闹心,暂时关掉了。
我试试你的,多谢分享。