当 control-g 在非常大的文件中不起作用时如何中断 emacs?

Wil*_*mKF 17 emacs syntax-highlighting

在 Emacs 中查看非常大(例如 128MB)的文件并跳转到文件末尾时,我遇到了某种 O(n^2) 或更糟的行为。我认为这可能与我的着色算法有关,可以根据上下文为文本着色。如果我输入 control-g (keyboard-quit),则操作不受影响。我想要一些方法来恢复我的 emacs 会话而不仅仅是杀死它。我尝试发送 SIGINT,但 emacs 刚刚退出。是否有我可以发送的任何信号,或以其他方式(可能在调试器中)强制正在运行的任何操作放弃并将控制权交还给我?

小智 11

我怀疑这是字体锁定模式。那可能只做靠近可见部分的部分。它可能是在内存中复制数据。

sigusr1

sigusr2

当 Emacs 进程接收到信号SIGUSR1SIGUSR2. 它们不包含附加数据,因为信号不携带附加信息。它们可用于调试(请参阅错误调试)。

来源:GNU Emacs Lisp 参考手册:杂项事件

我不知道它会做什么(或者你正在运行什么版本的 emacs),但你可以尝试一个可能的非破坏性信号(USR1 或 USR2)。

$ kill -USR1 pid

或者你可以去睡觉,看看它是否恢复。

  • 哇,发送 `kill -USR2` 到 [emacs-mac](https://github.com/railwaycat/emacs-mac-port) 在类似情况下对我有用——在 js2-mode 中加载一个大文件并启动一个搜索。USR2退出isearch,进入调试器。比杀死进程好得多! (3认同)