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

iva*_*van 11 haskell ghci haskeline

根据haskeline 文档,输入CTRL+ Y应该从kill-ring中弹出最近的条目(例如我刚刚通过CTRL+ 删除的行U).我找到了它,它暂停了REPL,好像我输入了CTRL+ Z.

作为一个笨拙的解决方法,我发现从杀死环中键入CTRL+ V CTRL+ Ypops作为普通CTRL+ Y应该这样做.

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

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

K. *_*uhr 6

Mac OS终端/ ttys具有"dsusp"或"delay suspend"键的概念,Ctrl-Y是指定的常用键.在tty级别,当读取CTRL+ 时Y,它的行为有点像CTRL+ Z.区别在于CTRL+ Z键入时会立即暂停; 当底层进程尝试读取字符并且输入流中弹出+ 标记时,CTRL+ Y会导致挂起.CTRLY

(CTRL+ V通常分配给"lnext"键,它通过使下一个键"literal"跳过终端处理,这就是CTRL+ V Ctrl+ Y工作的原因.)

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

在此期间,您可以通过运行以下命令禁用"dsusp"键:

stty dsusp undef
Run Code Online (Sandbox Code Playgroud)

在你推出GHCi之前.在你的".bashrc"和/或".profile"中粘贴这个是一个好主意,因为功能很大程度上是无用的.