2012-11-14 67 views
4

我從Linux終端使用Ocaml。有時它會陷入一種奇怪的模式,它不會像預期的那樣響應我的鍵盤。例如,如果我向上,向下,向右和向左按下箭頭,它會在輸入中生成^[[A^[[B^[[C^[[D。或者,有時如果我只鍵入一個字母,它可能會連續三次重複該字母,並且/或者如果我鍵入刪除鍵,則會輸入「^ H」。Linux終端字符顯示爲符號而不是鍵盤上鍵入

有人知道這裏發生了什麼嗎?我假設我無意中做了某些事情來切換模式,但我不知道如何切換回去,或者爲什麼它首先切換。

+1

我不能告訴你_why_你看到了,但是你看到的是代表鍵盤上按鍵的控制代碼。這是一個相當迷人的話題,但你可以從這裏開始:http://en.wikipedia.org/wiki/C0_and_C1_control_codes#C0_.28ASCII_and_derivatives.29。我對OCAML並不熟悉,但是也許用這個新詞彙(轉義序列,控制代碼等)武裝你的Google結果會有所改進。 –

+0

你也可以修改你的程序來使用'readline'庫,參見http://programmer-monk.net/trac/ocaml-misc/wiki/ReadlineDocumentation,如果使用'ocaml'頂層,你可以在'emacs'內運行它 –

回答

6

我認爲這基本上是這個其他堆棧溢出問題的重複:

Is it possible to use arrow keys in OCaml interpreter?

股票版本OCaml的解釋並不能解釋像箭頭鍵特殊鍵。所以它只會迴應他們的控制代碼(如本格雷厄姆指出的那樣)。爲了獲得您可能想要的行爲(編輯輸入,回到之前的行等),您需要用行編輯工具包裝OCaml解釋器。查看上面鏈接的其他問題的一些建議。

這並不能解釋爲什麼你會看到不同的行爲模式,但我仍然認爲這是你想要考慮的問題。

+1

你也可以在安裝'ledit'後運行你的程序'ledit yourprog yourargs ....' –

2

你應該使用Utop。 Utop是一個OCaml解釋器,它提供自動完成(如bash)和命令歷史。當然,箭頭鍵的所有問題都會消失。

你需要編譯ZedLambda-Term來編譯Utop。

相關問題