2012/02/14

Vimが無いと夜も安心して眠れないVimキチガイの皆さんこんにちわ。
Twitter
ShougoMatsu

そういえば、VimもMessagePackで通信できると面白いのではないか。


https://twitter.com/#!/ShougoMatsu/statuses/168691297601863681
こうですかわかりません。
mattn/msgpack-vim - GitHub

MessagePack implements for vim

https://github.com/mattn/msgpack-vim
Vim scriptは型が豊富ではないので、可逆圧縮ではありませんが簡単な物ならば動きます。
# -*- coding: utf-8 -*-
require 'msgpack/rpc'
class MyHandler
  def add(x,y) x+y end
end
svr = MessagePack::RPC::Server.new
svr.listen('0.0.0.0'18800MyHandler.new)
svr.run

こんなサーバを走らせておき let mp = msgpack#client("127.0.0.1"18800)
echo mp.call("add", 1, 2)
call mp.close()
Vimからこのように実行します。すると 3 おぉ... もちろん配列、ディクショナリ、浮動小数点、文字列、整数は当たり前で扱えます。
# -*- coding: utf-8 -*-
require 'msgpack/rpc'
class MyHandler
  def get_dict()
    {:foo => "ばー"}
  end
end
svr = MessagePack::RPC::Server.new
svr.listen('0.0.0.0'18800MyHandler.new)
svr.run
こんなコードなら let mp = msgpack#client("127.0.0.1"18800)
echo mp.call("get_dict")
call mp.close()
{'foo': 'ばー'} と表示されます。日本語もバッチリですね!

msgpack#client に関しては通信に vimproc を使ってますが、ここはちょっと弄れば nc でも通信可能ですし、xxd なんかを使えばバイナリファイルとしても保存可能です。 また msgpack#packmsgpack#unpack は単体関数として使えるのでいろんな物に利用出切るかと思います。

誰得度がかなり高いですが、よろしければどうぞ。
Posted at 17:43 | WriteBacks () | Edit
Edit this entry...

wikieditish message: Ready to edit this entry.






















A quick preview will be rendered here when you click "Preview" button.