我经常在 emacs 内的 shell 中工作(在 Mac 上)。过去,当我输入 control-Q control-C 时,就会终止 shell 中运行的进程。然而,大约一年前,由于某种原因,它不再起作用了;现在没有效果了。有人知道为什么吗,或者有其他方法吗?
我使用
term-mode
也遇到了同样的问题。
我将
term-interrupt-subjob
绑定到我选择的按键绑定:
(add-hook 'term-mode-hook (lambda ()
(define-key term-raw-map (kbd "C-'") 'term-interrupt-subjob)
我不确定您使用哪种模式与 Emacs 的 shell 交互(下等 shell、Emacs shell 或终端模拟器)。因此,您可能需要对此进行一些修改,例如将
term-interrupt-subjob
替换为 comint-interrupt-subjob
并更改模式挂钩。
回答评论中的问题:
您将该函数添加到 .emacs 文件中。为了使其生效,您需要对其进行评估:您可以选择它并运行
M-x eval-region
或者您可以重新启动 Emacs。
如果您正在运行
M-x shell
,则您正在使用 shell-mode
。 由于您正在使用
shell-mode
,因此您想使用 add-hook 'shell-mode-hook
代替 add-hook 'term-mode-hook
,使用 shell-mode-map
代替 term-raw-map
。
但是,在
shell-mode
中,C-c C-c 默认运行命令 comint-interrupt-subjob
。所以这应该像罗夏所说的那样开箱即用。我不确定为什么它不适合你。
你可以尝试:
(add-hook 'shell-mode-hook (lambda ()
(define-key shell-mode-map (kbd "C-c C-c") 'comint-interrupt-subjob)
看看是否有帮助。但这应该已经设置了,因为它是默认的,所以真的不清楚它是否能解决你的问题。
我相信您正在寻找
C-c C-c
命令。
它应该从活动 shell 缓冲区运行。