我有时会遇到此错误,但并非总是如此,这让我发疯。我不知道这是否是一个错误,或者是否有一些我不知道的行为或修复。
我使用 :{ 和 :} 输入多行命令,有时当我想结束该命令时,如下所示,我会收到如下所示的错误:
*MyModule| :}
unknown command ':}'
use :? for help.
我想说它在 97% 的情况下都能正常工作,但只有 3% 的情况下我会遇到这种情况。
据我所知,应该始终可以输入 :} 来关闭多行条目,如下所述:
http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/interactive-evaluation.html
目前,我知道在这种情况发生时摆脱这种情况的唯一方法是 ctrl+D,不幸的是,这会杀死 ghci。
A.这是一个错误还是有某种原因导致 :} 突然变成“未知命令”?
B.如果我遇到这种情况,有没有办法在不使用 ctrl+D 的情况下恢复?无论我尝试多少次:},一旦我进入这种情况,它总是会导致“未知命令”,尽管我期望此命令关闭多行条目。
就像问题中所说的那样,这是 Arch Linux 上的 GHCi 版本 7.6.3。
最佳答案
正如我在评论中已经指出的,出现此行为的原因是按下 Ctrl-C
时 GHCi 无法正确重置提示。问题的根源可能在于以下代码(摘自ghci-ng
):
multiLineCmd q = do
st <- lift getGHCiState
let p = prompt st
lift $ setGHCiState st{ prompt = prompt2 st }
mb_cmd <- collectCommand q ""
lift $ getGHCiState >>= \st' -> setGHCiState st'{ prompt = p }
return mb_cmd
(参见 InteractiveUI.hs line 712 )
如果collectCommand
抛出UserInterrupt
,那么重置promt的行将永远不会被执行。我将此代码更改为:
multiLineCmd q = do
st <- lift getGHCiState
let p = prompt st
lift $ setGHCiState st{ prompt = prompt2 st }
mb_cmd <- collectCommand q "" `GHC.gfinally` lift (getGHCiState >>= \st' -> setGHCiState st'{ prompt = p })
return mb_cmd
这解决了问题。
关于haskell - 使用 ghci 7.6.3,:}\n results in an error of "unknown command",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888797/