Emacs停止响应,通常是因为陷入循环中了,这时你需要按下 C-g
来挑出死循环.
若 C-g
不起作用则很可能是因为你用同步的方式调用了外部程序,而该外部程序由于某些原因一直卡着没有退出. 这种情况下,你只需要杀掉这个外部进程就可以了. 在MS Windows中你可以通过任务管理器来杀掉进程.
如果我不知道要杀掉哪个外部进程怎么办? 那你恐怕只能杀掉Emacs本身了. 但是杀掉Emacs进程会不会丢失那些还未来得及保存的工作呢? 也不尽然,我们稍候再来讨论这个问题.
在MS Windows上, Emacs可能会调用某些依赖外部工具(像grep,find,ftp,diff,latex之类的额)的命令,而这些外部工具若没有安装或者配置好的情况下,Emacs也可能会停止响应.
下面是一段练习用的代码,执行这段代码Emacs就会停止响应了.
(while t
(print "haha"))
你可以通过按下 C-g
退出循环.
下面这段代码只适用于MS Windows环境. 执行这段代码Emacs又会卡住了.
(call-process "notepad")
若你没有看到记事本的窗口出现的话,那么打开任务管理器找到并杀掉notepad.exe吧.
若你想要调试并找到引起Emacs停止响应的原因的话,调用命令 toggle-debug-on-quit
.
若你想调试那些会引起Emacs停止响应且 C-g
不起作用的命令的话, 执行 M-x debug-on-entry
然后输入要调试的命令(例如call-process)即可.
如果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.”. 然后你通过 n
或 p
移动到最近时间的那个item上再按下 C-c C-c
就行了.
Emacs会访问对应的论文文件,然后从自动保存的数据中释放出那些尚未保存的修改,并将这些修改应用到访问论文文件的那个buffer中. 然后你就可以继续完成你的论文了. 但是在开始之前最好还是保存一下文件比较好.
谁会用Emacs而不是文字处理器来写博士论文呢? 有些org-mode和AUCTeX的使用者会这么做. 这个视频 展示了如何用Emacs来生成一篇带代码片段的PDF文件. 这在你写论文时十分方便.
用Emacs作一些修改,然后等待一段时间. 待Emacs自动保存后,在任务管理器中找到并杀掉Emacs进程,然后试试你能否恢复未保存的工作.