Haskell:GHCi 将 Ctrl-Y 视为 Ctrl-Z

Haskell: GHCi treats Ctrl-Y like Ctrl-Z

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

作为一个笨拙的解决方法,我发现输入 CTRL+V CTRL +Y 像普通的 CTRL+Y 一样从 kill ring 弹出。

这是已知错误,还是其他原因?我可以修好吗?我是 运行 GHC 版本 8.0.2。

不确定这是否重要,但我是 运行 GHCi via stack(例如 stack ghci),并且我 brew 安装了 stack (macOS)。

Mac OS terminals/ttys 有一个 "dsusp" 或 "delayed suspend" 键的概念,而 Ctrl-Y 是通常分配的键。在 tty 级别,当读取 CTRL+Y 时,它的行为有点像 CTRL+ Z。不同之处在于 CTRL+Z 在键入时会立即暂停; CTRL+Y 当底层进程试图读取字符和 CTRL+[= 时导致挂起21=]Y 标记在输入流中弹出。

(CTRL+V 通常分配给 "lnext" 键,通过使下一个键跳过终端处理"literal",这就是为什么 CTRL+V Ctrl+Y 有效。)

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

同时,您可以通过 运行 禁用 "dsusp" 键:

stty dsusp undef

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