VimM #4 Vim Server 入門
行って参りました。VimM#4。
http://vim-users.jp/2009/06/vimm4-ann/
参加者50名という結構大規模な勉強会になっていて、なんだか心強い感じです。首都圏各地から集まった猛者たちの発表にまぎれて入門的なゆるい内容のものがあってもいいだろうということで Vim Server についてさわりだけ発表してまいりました。
Vim Server を選んだ意味は特になくて、なんとなくこの機能マイナーなんじゃないかという漠然とした感じと、宴会芸的に(決して技術的にではなく)面白いネタが出来るんじゃないかという淡い期待がありました。他だと :help s-ex の周りも面白そうな予感がしています。vimscriptの実行系を外部に切り出すっていうのに挑戦したいですね。
以下が発表内容です。
発表内容
vim server 入門
- :help clientserver
- Vim Server?
- setup
- configure +clientserver
- :version(+clientserver があれば使える)
- :echo has('clientserver') (1と出れば使える)
- 使い方1(FOOは任意のサーバ名)
- 使い方2
Demo
- 使い道を考える
Vim web server!
- 問題点
- listen 出来ない
- proxy 作れば解決
Demo
proxy.pl
#!/usr/bin/perl use strict; use warnings; use POE qw/Component::Server::HTTP/; use VimRemote::Agent; use File::Temp; use File::Slurp qw/write_file read_file/; my $aliases = POE::Component::Server::HTTP->new( Port => 80000, ContentHandler => { '/' => sub { my ($req, $res) = @_; # pickup target vim server my $agent = VimRemote::Agent->new(); my @server = $agent->serverlist(); if (0 == @server) { die "no vim server found"; } my $server = shift @server; # send request file to the vim server my $tmpfile = File::Temp->new( TEMPLATE => 'vimhttpd-session-XXXXX'); write_file($tmpfile, $req->as_string); $agent->run_timeout(60 * 10); $agent->remote_wait($server, $tmpfile->filename); # parse response my ($is_body, @response_body); foreach my $line (read_file($tmpfile->filename)) { $is_body = 1 if $line eq "\n"; push @response_body, $line if $is_body; } my $response_body = join '', @response_body; $res->content_type('text/html'); $res->content($response_body); $res->code(RC_OK); return RC_OK; }, }, ); POE::Kernel->run;
VimRemote::Agent(ネタモジュールなので実際には使わないでください)
http://github.com/bonar/vimremote-agent/tree/master
動画キャプチャ
操作の動画(実際にはちゃんと(?)ターミナルでやりました)は、スクリンクロラ(http://www.bicoid.com/software/screenCrawlers/)というキャプチャソフトで取ってみました。使ってみたかったんです。動画キャプチャは有料じゃないとまともに使えないものが多いので無料でこの使いやすさは素晴らしいですね。QuickTimeの巨大なファイルが出来てしまうのと、ファイルの保存にかなり時間がかかるのがネックですが、それは差し引いてもいいです。iMovie でm4v に変換するといい感じです。
他の方の発表について
開始前に セキュリティ&プログラミングキャンプ2009の告知がありました。生吉岡弘隆さんを見ることが出来て感激です。講師の方も非常に豪華でかなり面白そうでした。もっと若ければ、、是非オーバーエイジ枠を設けて欲しいです。
hagino_3000 さん ― “VimでJavaScript”
Eclipse から vim への移行の話だったと思うのですが、最終的には無理せずEclipseに戻るあたりが秀逸だなと思いました。
ssig33 さん ― “人類の絶滅”
とにかくGrowlの嵐がすごかったです
ujihisa さん ― “blogger.vim”
恥ずかしながら metarw 初めて知ったのですが、これかなり面白そうですね。いろいろなものに応用できそうです。webサービスへの操作のほとんどは GET と POST なので、これはこのまま文書編集のメタファーとして表現出来る、と考えると無限の可能性がありますね。