2012/02/14

Recent entries from same category

  1. clangd を使う時に便利なコマンド compiledb
  2. VimConf 2018 に行ってきた。
  3. Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
  4. Vim の :terminal の中から外の Vim を操る方法
  5. Vim と日本語入力の話。

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 | Edit


blog comments powered by Disqus