Vim上でGaucheのREPLを動かす
※2012/5/4 追記 neocomplcache用のキーワードパターン記述を追加
タイトル通り、画像の通りのものを作りました。
Vim上からgoshREPLを扱うためのVimscriptです。
ソースコードはGithubにあります。こちら。
インストール方法は標準の方法と変わりないので割愛。
ただ、動かすためにはvimprocとGauche本体が必要なのでそちらも一緒にインストールしてください。
操作方法は基本的には標準のgoshと同じです。
ただ、Vim上で扱うということで様々な恩恵を受けることができます。
- RedoとUndoが使える
- シンタックスハイライト、オートインデントが可能
- neocomplcache等による補完機能が使える
- (readline風に)入力履歴をさかのぼることができる
- 以前に入力したテキストを範囲選択して(テキストを少し修正して)再び実行することができる
※追記
neocomplcacheが入っている方は、vimrcに以下のようなパターンを書いておくとgoshREPL内でシンタックス補完などがきくようになると思います。
let g:neocomplcache_keyword_patterns['gosh-repl'] = "[[:alpha:]+*/@$_=.!?-][[:alnum:]+*/@$_:=.!?-]*"
最後の一つは追加の説明が必要だと思うので少し解説します。
goshREPLバッファに表示されている文字列は全て単なるテキストなので、カーソルを動かして以前に入力した行に戻ることができます。
で、式を修正してその行で再びエンターを押すと、修正された内容で評価できます。
さらに、範囲選択してからエンターを押すと、選択した範囲の内容をもう一度実行することができます。
選択モードはノーマル選択・行選択・矩形選択が可能なので、式全体の中で一部分だけを実行ということも可能です。
この範囲選択して実行という動作は基本的にはgoshREPLのバッファ内のみで有効になっていますが、
ほかのバッファでも同じことができれば便利なときがあります。
プログラムを書いているときに一部分だけを実行させて動作を確かめたいということってありますよね?
そんな時は
vmap <CR> <Plug>(gosh_repl_send_block)
というようなキーマップをvimrcに書けば実現できます。
それでは最後に、このプラグインで定義されているコマンドやバッファ内で使えるキーマップを紹介します。
コマンド
コマンド名 | 説明 |
---|---|
GoshREPL | gosh REPLを起動する |
GoshREPLWithBuffer | 現在バッファのテキストを全て評価済みの状態でgosh REPLを起動する |
GoshREPLClear | gosh REPLの内容をすべてクリアする |
GoshREPLSend hoge | 引数のhogeをGaucheの式としてgosh REPL内で評価するまだgosh REPLが起動していない場合は自動的に新しいREPLが起動する |
GoshREPLLines | GoshREPL内で実行したすべての式をリスト表示する |
goshREPLバッファ内で有効なキーマップ
モード | キー | 説明 |
---|---|---|
Visual | <CR> | 選択されているテキストを実行 |
Normal, Insert | <C-p> | 入力履歴を以前にさかのぼる |
Normal, Insert | <C-n> | 入力履歴を次に進む |
割り当て可能なキーマップ
キーマップ名 | 説明 |
---|---|
<Plug>(gosh_repl_send_block) | vmapで任意のキーに割り当てることで、選択した範囲のテキストをGoshREPLSendコマンドと同じように実行することができる |
変更可能な変数
変数名 | デフォルト値 | 説明 |
---|---|---|
g:gosh_enable_ring_history | 1 | 0にすることで、入力履歴の始端と終端をつなげないようにする |
g:gosh_enable_auto_use | 0 | 1にすることで、REPL内で自動use機能が働くようになる 詳しい機能説明はコチラ |
g:gosh_updatetime | 1000 | REPL内で出力確認を行う時間間隔(ミリ秒単位) |
g:gosh_buffer_direction | 'h' | 'h'の場合はREPLバッファが水平に分割されて開く 'v'を指定すれば垂直に分割されて開く |
g:gosh_buffer_width | 30 | REPLバッファを垂直方向に開いた時の横幅 |
g:gosh_buffer_height | 15 | REPLバッファを水平方向に開いた時の縦幅 |
基本的な機能は以上です。
このVimscriptはただ自分がほしかったという動機で作ったので、
カスタマイズ性が低かったり、足りない機能があると思います。
使ってみて何か思うようなことがあればぜひフィードバックしてください。
できるだけ対応したいと思います。