mit-scheme の REPL, タブ補完とか履歴が効かないのが気に入らない
問題
$ mit-scheme
すると repl が起動してやりとりができるようになるが,タブ補完も矢印上下のコマンド補完も効かないし,
矢印キーもemacs的なショートカットも効かない.
下手をするとこういう惨状が起こる:
1 ]=> (defni^[[D^[[D^[[A^A
これはひどすぎる.何とかしたい.Python とかの repl でも採用しているような readline が使えればそれでいいのだけど.
Ask Stackoverflow
というわけで,Stackoverflow に質問があった.mit-scheme REPL with command line history and tab completion (aaronstacy による質問).
SICP を読んでて, OS X 10.8 に homebrew で mit-scheme 入れて使ってる.
いい感じなんだけど,履歴とか補完をやってくれる Python とか Node.js の REPL の便利さに甘やかされてしまってるらしい.
すごい重いのを求めてるわけじゃなくて, こういう機能って最近の REPL なら簡単に使えるようにできるよね( Python なら 簡単な startup ファイルで, Node.js でも数行で実装できる).
重たい application 入れるとか,emacs に乗り換えるとかじゃなくて(例えば xterm 上で動くような感じで)タブ補完と コマンド履歴の機能を mit-scheme で使う方法ってあるだろうか.
そして Bobby Norton による回答:
readline wrapper を入れましょう.
brew install rlwrap
1インストールすれば,
rlwrap scheme
で履歴,括弧の対応,タブ補完が使えるようになる. 個人的には次のようなオプションを渡して使ってる:
-r
,--remember
: put all words seen on in- and outpu on the completion list-c
,--complete-filenames
: complete filenames-f
,--file
file
: Split file into words and add them to the completion word list.
-f
には MIT Scheme Reference Manual から抽出したのを使ってる.ここ に上げといた. これを$HOME/scheme_completion.txt
に保存しておいて
rlwrap -r -c -f "$HOME/scheme_completion.txt" scheme
でこんなかんじだ
1 ]=> (flo:a <tab tab> flo:abs flo:acos flo:asin flo:atan flo:atan2 1 ]=> (flo:abs -42.0) ;Value: 42.
めでたい.
ということで rlwrap
超便利です.
-
Ubuntu のレポジトリにもある. ↩