Vimが無いと夜も安心して眠れないVimキチガイの皆さんこんにちわ。
Twitter
そういえば、VimもMessagePackで通信できると面白いのではないか。
https://twitter.com/#!/ShougoMatsu/statuses/168691297601863681
こうですかわかりません。
mattn/msgpack-vim - GitHub
MessagePack implements for vim
https://github.com/mattn/msgpack-vim
Vim scriptは型が豊富ではないので、可逆圧縮ではありませんが簡単な物ならば動きます。
require 'msgpack/rpc'
class MyHandler
def add(x,y) x+y end
end
svr = MessagePack::RPC::Server.new
svr.listen('0.0.0.0', 18800, MyHandler.new)
svr.run
こんなサーバを走らせておき
let mp = msgpack#client("127.0.0.1", 18800)
echo mp.call("add", 1, 2)
call mp.close()
Vimからこのように実行します。すると
3
おぉ... もちろん配列、ディクショナリ、浮動小数点、文字列、整数は当たり前で扱えます。
require 'msgpack/rpc'
class MyHandler
def get_dict()
{:foo => "ばー"}
end
end
svr = MessagePack::RPC::Server.new
svr.listen('0.0.0.0', 18800, MyHandler.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#pack
と
msgpack#unpack
は単体関数として使えるのでいろんな物に利用出切るかと思います。
誰得度がかなり高いですが、よろしければどうぞ。