【问题标题】:How to cancel interpreter command in emacs python-mode如何在emacs python-mode中取消解释器命令
【发布时间】:2013-03-04 20:26:30
【问题描述】:

如果我在 python 解释器中输入错误的命令,有时我只会看到...。例如,如果我输入help(random.unif 并按回车,我将无法输入新命令。我必须退出 emacs 并再次启动 python 和解释器。有办法纠正吗?

【问题讨论】:

    标签: python emacs


    【解决方案1】:

    正如 Pavel Anossov 所解释的,您想向 Python 发送一个 CTRL-C 来中断它。

    但在emacs中,默认情况下,CTRL-C是前缀键。

    幸运的是,在大多数交互式 shell 模式下,包括 python-mode 和替代模式,连续按两次 CTRL-C 会向解释器发送一个 ctrl-C。或者,从技术上讲,CTRL-CCTRL-C 绑定到comint-interrupt-subjob。 (当然,您可以以任何其他方式运行它——甚至是 META-X comint-interrupt-subjob,如果您真的想要的话。)结果如下所示:

    Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
    [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> help(f
    ...   ^C ^C
    KeyboardInterrupt
    >>> 
    

    另一种选择是使用quoted-insert 命令,通常绑定到CTRL-Q,然后点击CTRL-C。但是,因为这不会中断通常的行输入,所以通常必须在其后加上换行符。结果如下所示:

    Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
    [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> help(f
    ... ^C
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    KeyboardInterrupt
    >>> 
    

    【讨论】:

      【解决方案2】:

      通常 CTRL-C 有效。不确定emacs嵌入式解释器。或者,只需向解释器提供它正在等待的任何内容(在您的示例中为))。

      【讨论】:

      • 问题是知道 如何CTRL-C 发送到 emacs interpeter(以及如何让它中断正常的readline -esque 模式与 CTRL-C 在控制台中的方式相同,但如果你没有这样做,并且只发送一条只有 CTRL-C 的行,那基本上也可以)。