Haskell:GHCi像Ctrl-Z一样对待Ctrl-Y

时间:2017-09-19 01:39:53

标签: haskell ghci haskeline

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

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

这是一个知道错误,还是其他什么在起作用?我可以修理吗?我正在运行GHC 8.0.2版。

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

1 个答案:

答案 0 :(得分:5)

Mac OS终端/ ttys具有" dsusp"的概念。或者"延迟暂停"键,Ctrl-Y是分配的常用键。在tty级别,当读取 CTRL + Y 时,它有点像 CTRL + Z 。区别在于 CTRL + Z 会在键入时立即暂停;当基础进程尝试读取字符并弹出 CTRL + Y 标记时, CTRL + Y 会导致挂起在输入流中。

CTRL + V 通常分配给" lnext"键,它通过制作下一个键"文字&#跳过终端处理#34;,这就是 CTRL + V Ctrl + Y 的原因。)

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

在此期间,您可以停用" dsusp"密钥运行:

stty dsusp undef

在发布GHCi之前。在你的" .bashrc"中坚持这一点和/或" .profile"这是一个好主意,因为功能很大程度上是无用的。