そういえば、VimもMessagePackで通信できると面白いのではないか。
https://twitter.com/#!/ShougoMatsu/statuses/168691297601863681
mattn/msgpack-vim - GitHubVim scriptは型が豊富ではないので、可逆圧縮ではありませんが簡単な物ならば動きます。
MessagePack implements for vim
https://github.com/mattn/msgpack-vim
# -*- 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', 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
おぉ... もちろん配列、ディクショナリ、浮動小数点、文字列、整数は当たり前で扱えます。
# -*- 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', 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
は単体関数として使えるのでいろんな物に利用出切るかと思います。誰得度がかなり高いですが、よろしければどうぞ。