さて、みなさん大好きテキストエディタのVimですが、実はサーバとして稼動させることができることをご存じでしょうか。
参考
Vimにも比較的最近、ソケット通信を扱うためのChannel機能というものが入りました。 そこで、2016年最後のネタとして、VimのChannel機能を使い、Vim Scriptでecho serverを実装してみようと思います。
まず、Vim本体に以下のパッチを当ててください。 このパッチは、私が開発に利用しているArch Linuxでしか動作確認を取っておらず、面倒だったのでWinSock対応はしておりません。 また、既存のChannel機能に無理矢理合わせるために、開いたソケットを閉じるなどの処理を一切省いてしまいました。 片手落ち感は否めませんが、ここで重要なのは『Vim Scriptでecho serverを実装したい』という願望を叶えることと割り切りました。
パッチはこちら
※gistaの設定をミスって、anonymousとして上がってしまいました….
パッチを当てたVimをmakeすると、src/vimが出来あがります。 では早速、Vim Scriptを書いていきましょう。
let ch= ch_listen('0.0.0.0:12345', {
\ 'mode': 'raw',
\ 'waittime': -1,
\})
while 1
let st= ch_status(ch)
echomsg st
if st ==# 'fail' || st ==# 'closed'
break
endif
let msg= ch_readraw(ch)
echomsg 'Received: ' . msg
if !empty(msg)
call ch_sendraw(ch, msg)
endif
endwhile
さて、このVim Scriptを echo-server.vim
として保存し、 ./src/vim -N -u NONE -U NONE --noplugin -S echo-server.vim
を実行しましょう。
おめでとうございます、 netstat -tanlp
すると、12345ポートでVimがListenしている勇姿が見えるでしょうか。
動作確認に入ります。
telnet 127.0.0.1 12345
を実行し、何か打ってみてください。
Vimがechoを返してくるはずです。
以上、ネタでした。