2012/02/14

Recent entries from same category

  1. VimConf 2023 Tiny に参加しました
  2. Vim で Go 言語を書くために行った引越し作業 2020年度版
  3. Vim をモダンな IDE に変える LSP の設定
  4. ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版
  5. VimConf 2019 を終えて

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 by