2017-09-19 33 views
10

按照haskeline documentation,打字CTRL + Ÿ應該彈出從殺環最近的條目(例如我剛剛通過刪除CTRL行+ U)。我發現它會暫停REPL,就好像我輸入了CTRL + Z哈斯克爾:GHCI把按Ctrl-Y如Ctrl-Z

作爲一個笨拙的解決辦法,我發現打字CTRL +VCTRL +Ÿ從殺環持久性有機污染物的純CTRL +Ÿ應該做的。

這是一個知道的錯誤,或者是在玩什麼?我可以修復它嗎?我正在運行GHC版本8.0.2。

不知道它是否重要,但我正在通過堆棧運行GHCi(例如stack ghci),並且我釀造了已安裝的堆棧(macOS)。

+0

我很確定Stack是不相關的,但是您應該報告GHC版本。 – dfeuer

回答

4

Mac OS終端/ ttys具有「dsusp」或「delayed suspend」鍵的概念,並且Ctrl-Y是分配的常用鍵。在TTY水平,當CTRL +Ÿ閱讀,它的作用有點像CTRL +ž。不同之處在於,CTRL + Z在輸入時會立即暫停; CTRL + ý使得當底層進程試圖讀取的字符的暫停和CTRL + ý標記在輸入流中彈出。

CTRL + V通常分配給 「LNEXT」 鍵,通過使下一個鍵 「字面」 跳過的終端處理,這就是爲什麼CTRL + VCtrl鍵 + Y的作品。)

理想情況下,GHCi會檢查「dsusp」功能(例如,Linux上不存在),並在檢測到時禁用它,但看起來它沒有這樣做。

在此期間,您可以通過運行禁用 「DSUSP」 鍵:

stty dsusp undef 

在啓動之前GHCI。在你的「.bashrc」和/或「.profile」中堅持這是一個好主意,因爲這些功能在很大程度上是無用的。

+0

完美,謝謝!我很好奇爲什麼這從來沒有阻止Ctrl-Y在Bash中的行爲。我想當我已經在父shell中時,暫停當前工作沒有意義嗎? – ivan

+1

那麼,Bash包含特定的代碼來防止Ctrl-Y(或Ctrl-Z)在shell提示符本身產生效果。如果沒有這樣做,Bash將像任何其他進程一樣暫停(並且可能會在沒有準備處理它的父進程的情況下凍結)。 –

+0

非常有意義。感謝澄清。 – ivan