EMACS-DOCUMENT

=============>集思广益

Emacs停止响应或崩溃了该怎么办

1 Emacs停止响应了怎么办

Emacs停止响应,通常是因为陷入循环中了,这时你需要按下 C-g 来挑出死循环. 若 C-g 不起作用则很可能是因为你用同步的方式调用了外部程序,而该外部程序由于某些原因一直卡着没有退出. 这种情况下,你只需要杀掉这个外部进程就可以了. 在MS Windows中你可以通过任务管理器来杀掉进程. 如果我不知道要杀掉哪个外部进程怎么办? 那你恐怕只能杀掉Emacs本身了. 但是杀掉Emacs进程会不会丢失那些还未来得及保存的工作呢? 也不尽然,我们稍候再来讨论这个问题.

在MS Windows上, Emacs可能会调用某些依赖外部工具(像grep,find,ftp,diff,latex之类的额)的命令,而这些外部工具若没有安装或者配置好的情况下,Emacs也可能会停止响应.

1.1 练习

下面是一段练习用的代码,执行这段代码Emacs就会停止响应了.

(while t
  (print "haha"))

你可以通过按下 C-g 退出循环.

下面这段代码只适用于MS Windows环境. 执行这段代码Emacs又会卡住了.

(call-process "notepad")

若你没有看到记事本的窗口出现的话,那么打开任务管理器找到并杀掉notepad.exe吧.

2 调试

若你想要调试并找到引起Emacs停止响应的原因的话,调用命令 toggle-debug-on-quit.

若你想调试那些会引起Emacs停止响应且 C-g 不起作用的命令的话, 执行 M-x debug-on-entry 然后输入要调试的命令(例如call-process)即可.

3 Emacs崩溃了怎么办

如果Emacs经常崩溃,那肯定要么Emacs版本太旧了,要么电脑太旧了.

假设你正在用Emacs写你的博士论文,你已经写了几个小时了却忘了保存文件了. 这时候Emacs突然崩溃,你要怎么才能恢复那些尚未保存的工作呢? 你只需要重新启动Emacs,然后运行 M-x recover-session 就会看到一个特殊的dired buffer. 这个buffer上有一行指示“Move to the session you want to recover, then type C-c C-c to select it.”. 然后你通过 np 移动到最近时间的那个item上再按下 C-c C-c 就行了. Emacs会访问对应的论文文件,然后从自动保存的数据中释放出那些尚未保存的修改,并将这些修改应用到访问论文文件的那个buffer中. 然后你就可以继续完成你的论文了. 但是在开始之前最好还是保存一下文件比较好.

谁会用Emacs而不是文字处理器来写博士论文呢? 有些org-mode和AUCTeX的使用者会这么做. 这个视频 展示了如何用Emacs来生成一篇带代码片段的PDF文件. 这在你写论文时十分方便.

3.1 练习

用Emacs作一些修改,然后等待一段时间. 待Emacs自动保存后,在任务管理器中找到并杀掉Emacs进程,然后试试你能否恢复未保存的工作.