vimの中だけでRubyのirbっぽい事して完結させる

前回の日記でvimExplorer事を次回書くと言いながらも、今回は違うことを書いてすいません。

vimExplorerは近々きっと・・・

今日のお題もvimです。

スクリプト言語ではとてもPerlが好きなのですが、最近はRubyに心を奪われて自由な時間があれば
そちらに時間を費やすようになっています。

まえおき

ちょっとしたRubyスクリプトの挙動を対話的に確認できるirbがとても便利です。
コンソールアプリなので基本的には、

irb

と叩き、irbのモードに入って

irb(main):001:0>

と表示された後、色々試したいことを入力していきます。今回はハッシュの例です。
例題の色は各言語の参考書によく使われていると思った色を入れてみました。*1

irb(main):001:0>lngColor = { :perl => 'blue', :ruby => 'red' }

ここで返される結果は、「lngColor」変数に格納された「{:perl => "blue", ruby => "red"}」です。(というようりlagColorが返す値)

次に

irb(main):002:0>lngColor[:python] = 'why?'

ここで返される結果は、「lngColor[:pathon]」に格納された「"why?"」が表示されます。

次に3つの要素が入った、ハッシュ変数名を入力してエンターキーを押すと、

irb(main):003:0>lngColor

「{:perl => "blue", python =>"why?", ruby => "red"}」が表示されます。

対話的でいい感じです。

とても便利なのですが、せっかちな私vimでコードを書いている時に、その場で確認したいなーと思っていました。

本題

ここからやっと本題です。

vimruby開発をするノウハウを探していたところ、下記のサイトに行き着きました。

【ボクノス】ブログ*2
http://d.hatena.ne.jp/tanakaBox/20070827/1188149288

これこれ!!。しかもかなり理想的。
素敵なスクリプト公開ありがとうございます。

evalばんざい。VimスクリプトRubyPythonが使用されているのを見ますが、私もこういうちょっとしたカスタ
マイズをできる人になりたい。「がんばるぞー。おーっ。」と自問自答してみる。

実例

使ってみました。まずは使えるように準備。

  • ftpluginのruby.vimに公開されているスクリプトを追記。
  • matchit.vimの導入と、選択できるように設定。
  • もちろんvim7ですよ。

んで、これを使う時はのファイルタイプはRubyモードで。foo.rbファイルとか開けば関連付けされて
rubyモードで開きますが、新規ファイルとかで試したい場合は

 :set ft=ruby

でOKです。

まずは基本形の流れ

こんな例題と同じっぽいコードをvimで入力

lngColor = { :perl => 'blue', :ruby => 'red' }
lngColor[:python] = 'why?'
lngColor
p lngColor
  • 一行目にカーソルを合わせて「Ctrl-Enter」を押すと、vimのコマンドを入力する場所に表示される↓↓
  • 二行目にカーソルを合わせて「Ctrl-Enter」を押すと、vimのコマンドを入力する場所に表示される↓↓
    • "why?"
  • 三行目にカーソルを合わせて「Ctrl-Enter」を押すと、vimのコマンドを入力する場所に表示される↓↓
  • 四行目にカーソルを合わせて「Ctrl-Enter」を押すと、vimのコマンドを入力する場所に表示される↓↓

p命令で 一行目にハッシュの結果が表示され、2行目にpが返す値が表示される。pの返す「nil」ってことなんですね。irbっぽい!!

次に応用系の流れ

同じコードを新規ファイルで作成します。

lngColor = { :perl => 'blue', :ruby => 'red' }
lngColor[:python] = 'why?'
lngColor
p lngColor

次は、1行目で「ctrl-Enter」2行目で「ctrl-Enter」3行目で「ctrl-Enter」。
ここまでは同じ流れです。では、続いて、1行目にカーソルを戻し「ctrl-Enter」2行目は飛ばして、3行目にカーソルを合わせて「ctrl-Enter」。

表示されたのは下記の通りだと思います。

{:perl => "blue", :ruby => "red"}

つまり、変数を書き換えているんですよね。irb!!(っぽい動き)便利だよー。

最後に選択系ですよ

選択系の動作もできるようです。

p "コンソールに表示する文字"
calcResult = 1 + 2 + 3
calcResult.class
p "コンソールに表示する文字"
calcResult

これをまとめて、vimで選択して「ctrl-Enter」を押すと、

"\203R\203................................"
"\203R\203................................"
6

こんな感じで表示されるはず。へぇ、日本語はunicode(?)で表示されるんだ。実はirbunicode
表示されます。おーっirbっぽい!!(笑)
出力された3行のうち、1・2行目はp命令の出力で、3行目が選択範囲の結果です。最後の行の結果
が表示されます。


他にも、 「1 + 2」の部分を選択して「ctrl-Enter」を押すと、「3」が表示されます。
部分的にevalができるんですねー。これも重宝します。

おまけでエラー系も
calcResult = 1 + 2 + 3
calcResul

この部分だけ選択して「ctrl-Enter」を押すと、そんな変数ねぇよ!!って例外を表示してくれます。
「1 +」だけ選択して「ctrl-Enter」を押すと、コンパイルエラーが表示。

いいねー。でも、こんな使い方きっとしないんだろうなぁ(笑)


一気に紹介しすぎて、わけわかんない文章になっていなるかもしれない・・・
ところで、irbのexitと同等の動作はどうすればいいんだろ?後で、調べてみようっと。

*1:Pythonのイメージカラーって何色だろ??

*2:初めてトラックバック機能を使います。どきどき。