この記事はVim Advent Calendar 2012 : ATND203日目の記事になります。
今回はGoogle Chrome Developer ConsoleのようなものVim scriptにも欲しいなっと思って、
Vim scriptでのイミディエイトウィンドウっぽいのを作ってみました。
インストール
インストールはNeoBundleとかでさくっとインストールしてください。
依存しているプラグインは基本的にありません。
インストール後の設定は特に必要ないです。
あえて設定するとすればウィンドウの高さとキーマッピングぐらい。
追記(2013/06/26): 設定しなくても十分使えるようにデフォルト設定していますが、設定についての詳細はhelpを参照してください。(オプションについては仕様が変わる可能性が大なのでここでは説明しないことにしました。)
" VimConsoleを開いた時のウィンドウの高さを設定。(デフォルト値は6です。)
let g:vimconsole#height = 10
NeoBundle 'rbtnn/vimconsole.vim'
「基本的に」というのは、https://github.com/thinca/vim-prettyprint をインストールしていた場合には
出力にPrettyPrint()を使うようになっています。なので入れていると、辞書やリストをいい感じに出力することができます。
使い方
基本的なインターフェースはjavascriptっぽくしてあります。
出力されるウィンドウはVimConsoleと言い、基本的にシングルトンなものです。
VimConsoleを2ウィンドウにすることは想定していません。
VimConsoleを開くには:VimConsoleOpen
コマンドで、閉じるには:VimConsoleClose
コマンドでできます。
一応、:VimConsoleToggle
コマンドも用意しています(開閉をトグルするコマンド)。
VimConsoleの内容を更新するには:VimConsoleRedraw
コマンドで更新できます。
VimConsoleの出力関連は以下のような関数やコマンドが用意されています。
VimConsoleの出力をクリアにする。
" 関数バージョン
call vimconsole#clear()
" コマンドバージョン
VimConsoleClear
VimConsoleに出力する。(1)
" 関数バージョン
call vimconsole#log(123)
" コマンドバージョン
VimConsoleLog "hoge\nfoo"
VimConsoleに出力する。(2)
" 関数バージョン(ハイライトは`WarningMsg`)
call vimconsole#warn("this is a warn message.")
call vimconsole#warn("this is a %s message.", 'warn') " printfのような引数にも対応しています。
" コマンドバージョン
VimConsoleWarn { 'A' : 23, 'B' : { 'C' : 0.034 } }
VimConsoleに出力する。(3)
" 関数バージョン(ハイライトは`Error`)
call vimconsole#error("this is an error message.")
" コマンドバージョン
VimConsoleError function('tr')
VimConsoleに出力する。(4)
" 第1引数が真なら出力されます。これに当たるコマンドは用意されていません。
call vimconsole#assert(1,"(true) this is an assert message.")
call vimconsole#assert(0,"(false) this is an assert message.")
VimConsoleのN行目に当たるオブジェクトを収得する。
" 引数を省略した場合、`line(".")`を指定したことになります。
let obj = vimconsole#at()
" VimConsoleの2行目のオブジェクトを返す。
let obj = vimconsole#at(2)
" 不正な引数は`{}`を返します。
let obj = vimconsole#at(-12)
以上、vimconsole.vimでした。まぁ、Vim scriptのデバッグとかに使ってもらえればいいなーと思います。