12

根据 haskeline文档,键入CTRL+Y应该会从 kill-ring 中弹出最近的条目(例如,我刚刚通过CTRL+删除的行U)。相反,我发现它暂停了 REPL,就好像我输入了CTRL+一样Z

作为一种笨拙的解决方法,我发现键入CTRL+ V CTRL+Y从杀戮环中弹出作为普通的CTRL+Y应该是这样做的。

这是一个已知的错误,还是其他原因?我可以修复它吗?我正在运行 GHC 版本 8.0.2。

不确定这是否重要,但我正在通过堆栈(例如stack ghci)运行 GHCi,并且我正在酿造已安装的堆栈(macOS)。

4

1 回答 1

8

Mac OS 终端/tty 具有“dsusp”或“延迟挂起”键的概念,Ctrl-Y 是通常分配的键。在 tty 级别,当读取CTRL+时Y,它的行为有点像CTRL+ Z。不同之处在于CTRL+Z在键入时会导致立即挂起;当底层进程尝试读取字符并且+标记在输入流中弹出时, CTRL+会导致挂起。YCTRLY

CTRL+V通常分配给“lnext”键,它通过使下一个键“文字”来跳过终端处理,这就是CTRL+ V Ctrl+Y起作用的原因。)

理想情况下,GHCi 会检查“dsusp”功能(例如,它在 Linux 上不存在)并在检测到它时将其禁用,但看起来它并没有这样做。

同时,您可以通过运行以下命令禁用“dsusp”密钥:

stty dsusp undef

在启动 GHCi 之前。将其粘贴在您的“.bashrc”和/或“.profile”中是一个好主意,因为该功能在很大程度上是无用的。

于 2017-09-19T21:57:51.497 回答