如何在 emacs 中终止 shell 内的进程?

问题描述 投票:0回答:2

我经常在 emacs 内的 shell 中工作(在 Mac 上)。过去,当我输入 control-Q control-C 时,就会终止 shell 中运行的进程。然而,大约一年前,由于某种原因,它不再起作用了;现在没有效果了。有人知道为什么吗,或者有其他方法吗?

shell emacs terminate
2个回答
0
投票

我使用

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

    请注意,要了解您正在使用哪种主要模式,您可以运行 describe-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)

看看是否有帮助。但这应该已经设置了,因为它是默认的,所以真的不清楚它是否能解决你的问题。


0
投票

我相信您正在寻找

C-c C-c
命令。

它应该从活动 shell 缓冲区运行。

© www.soinside.com 2019 - 2024. All rights reserved.