Windows上のvimshellでSMLインタプリタを動かす
Windows上のgvimで動いているvimshellから(主にSMLNJの)インタプリタを使いたいですが,
これはシェルスクリプトなので, 単にコマンド名を打つだけだとvimshellから実行出来ません.
vimshell> sml !!!Error: File "sml" is not found. (以下略
cygwin用のrlwrap経由で呼び出せば, 勝手にコマンドを探して実行してくれるはずです. *1
ところがcygwinからインストール出来るrlwrapはバージョン0.24なので正常に動作しません.
本家から最新版(私が動かしたのは0.37)を取って来て自分でコンパイルしましょう.*2
ここまでで実行は出来ますが,
これだけだとインタプリタの出力がvimshell上に表示されないので以下のように(vimrcなどに)設定します.
function! s:set_rlwrap_to_no_echoback_cmd () let g:vimshell_interactive_no_echoback_commands["rlwrap"] = 1 endfunction autocmd FileType vimshell call s:set_rlwrap_to_no_echoback_cmd ()
vimshellが実行される時に g:vimshell_interactive_no_echoback_commands にrlwrapのエントリを追加します.
(なんか間違ってる感があるけど…)
vimshell> rlwrap sml Standard ML of New Jersey v110.72 [built: Sun Oct 10 22:54:51 2010] - print "Hello, SML!\n"; Hello, SML! val it = () : unit -
やりました!
ちなみにcygwinからインストール出来る古いrlwrapを使うと
vimshell> rlwrap sml stdin is not a tty
とかエラー出してrlwrapが落ちます. ハマッた.
他のインタプリタ
Curry (Muenster Curry 0.9.11) は
rlwrap fakecygpty cyi
で正常に動いてるようです.
fakecygptyを挟まないとプロンプトが出ませんでした.