为什么在emacsshell中ctrl+d不退出ghci。。。但是python REPL是否退出?

2024-10-03 15:34:20 发布

您现在位置:Python中文网/ 问答频道 /正文

当使用emacs shell缓冲区时,control-d击键不会退出ghciREPL,但退出pythonREPL。gchi不是退出,而是在字符'\EOT'报告词法错误。在

如何让control-d正确退出emacsshell中的ghciREPL?另外,为什么ghci的工作方式与python不同?在

(是的,control-d在常规控制台窗口中退出ghci,而不是emacsshell。)

在下面的示例中,我尝试了输入control-d的两种变体。首先,我尝试了control-d,它从shell-mode-map运行comint-delchar-or-maybe-eof。然后我尝试使用control-q control-d序列显式地插入control-d字符,然后它显示为ASCII字符4,emacs显示为“^D”。(但是,如果实际字符4被粘贴到StackOverflow文本形式中,则显示通用的box character)。这两个变体在ghci中都失败。在

首先,ghci的不满意行为:

$ ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> 

<interactive>:1:1: lexical error at character '\EOT'
Prelude> ^D

<interactive>:2:1: lexical error at character '\EOT'
Prelude> :quit
Leaving GHCi.

接下来,pythonREPL的期望行为:

^{pr2}$

更新

我安装了最新的Haskell,但仍然有相同的问题。。。现在有了Haskell 8.2.1:

$ ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/  :? for help
Prelude> 

<interactive>:1:1: error: lexical error at character '\EOT'
Prelude> ^D

<interactive>:2:1: error: lexical error at character '\EOT'
Prelude> :quit
Leaving GHCi.

Tags: packageerror字符atcontrolinteractivecharacterprelude