SlideShare a Scribd company logo
かなりすごい発表(かなり) 
supermomonga
自己紹介
supermomonga
supermomonga 
http://blog.supermomonga.com 
twitter.com/supermomonga 
github.com/supermomonga
supermomonga 
フリーランスでRailsとかやってる
作ったプラグインの紹介
作ったプラグイン 
(1/2) 
音や通知に関するものが多め 
- Shaberu.vim 
… 
- jazzradio.vim 
… 
- skyfm.vim 
… 
- mplayer.vim 
… 
- ThingsPast.vim 
… 
Vimがしゃべるやつ(音声合成) 
Vimでジャズが聴ける(ネットラジオ) 
Skyrimではないやつ(Skyrimではない) 
mplayerを操作するライブラリ(未公開) 
通知センター(Mac OS X inspired)
作ったプラグイン 
(2/2) 
VimShellの拡張プラグインもある 
- vimshell-inline-history 
- vimshell-kawaii 
- vimshell-wakeup 
- vimshell-pure 
… 
… 
… 
… 
VimShellが便利になるやつ 
VimShellがかわいくなるやつ 
VimShellが便利になるやつ 
VimShellが便利になるやつ
おわり(おわり)
今日のテーマ
Vimは音でもっと便利になる 
Sound makes vim more benrily 
(Vimが便利である様子)
どういうことか
「通知」に関する例
我々がプログラミングをしている時 
身体のI/Oはどうなっているでしょうか
インプット 
アウトプット 
= ディスプレイ => 両目 
= 両手 => キーボード
両手と両目をフル稼働させている
これは両手と両目をフル稼働させている人です
このとき
もっと多くの情報を 
Vimから得たいとしたら?
例えば「通知」
For example 
- TweetVim … リプライやDMなどの受信を通知 
- J6uil.vim … チャットルームでの新規発言を通知 
- Watchdogs … RSpecを実行して、エラーがあれば通知 
- VimShell … git clone などの時間がかかるコマンドの終了を通知
そこで
「通知」を一元管理するプラグイン 
「ThingsPast.vim」をつくった
ThingsPast とは
Mac OS Xの「通知センター」を 
Vim内で再現するプラグイン
Mac OS X 通知センター
Mac OS X 通知センター
Mac OS X 通知センター
ThingsPast.vim
ThingsPast.vim
やっていること 
各プラグインのhookを利用して 
ThingsPastに通知を流し込んでいる
やっていること 
この時、通知オブジェクトにcallback関数を 
持たせることができるので、通知選択時に 
任意の処理を実行可能
たとえば 
「J6uilからの”新規発言受信”の通知」を 
ThingsPast上で選択(<CR>)すると 
J6uil.vimを起動
これによって 
通知の一元管理が実現
Vimで動くアプリケーションを開発する際 
通知関連の実装をThingsPastに丸投げできる 
(プラグイン側はhookを用意しておくだけ)
ユーザーは統一したインターフェイスで 
通知を閲覧し、通知元へ移動することができる
便利(かなり)
…
ここで問題が発生
我々はVimを使っている時 
両目をフル稼働させている
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
かなりすごい発表(かなり) at VimConf2014
集中している時に 
いきなり画面を分割される!!
とてもよくない(とても)
もっと「静かに」通知させたい
もっと「静かに」通知させる方法…
通知センターの「バルーン通知」を、 
バッファにオーバーレイさせて実現する?
そうじゃない
そもそも
集中して視覚を活用してコード書いてる時に 
視覚のリソースを少しでも奪うのがダメ
そんなのは「静か」じゃない
そんなのは「静か」じゃない
そこで音です
脳に情報を入力できる器官は目だけじゃない
視覚のリソースが足りないなら 
聴覚のリソースを使えばいい
聴覚へ通知
=音で通知
=音声合成で通知
=Shaberu.vim
Shaberu.vim 
Vimプラグイン処女作 
音声合成エンジンのラッパーライブラリ
1. Shaberu.vimで音声通知 
2. 詳しく見たくなったらThingsPastペインを表示
これで視覚をいきなり遮られることがない!
(デモ) 
https://vimeo.com/111277527
かなり便利(かなり)
まとめます
今日、通知の話を用いて 
伝えたかったこと
聴覚というリソースをもっと活用しよう
おまけ
その他の 
Shaberu.vim活用例
autocmd
様々なautocmdと連動させることで 
Vimがすごいべんりになる
起動/終了時に進捗を促してくれる 
au MyAutoCmd VimEnter * ShaberuSay '進捗どうですか' 
au MyAutoCmd VimLeave * ShaberuSay '進捗どうですか'
vimshell-wakeup.vim
VimShellで「時間がかかるコマンド」の実行が終了 
したとき、音声で通知してくれるプラグイン
VimShellで「時間がかかるコマンド」の実行が終了 
したとき、音声で通知してくれるプラグイン 
・設定した秒数以上の時間がかかったコマンドが終了した時に発動 
 (herokuへのデプロイとか) 
・コマンド終了時、VimShellバッファを開いていた場合は自明なので発動しない 
・ただし、VimShellバッファを開いていても、Vim以外のアプリケーションがア 
クティブになっていた場合は発動
VimShellで「時間がかかるコマンド」の実行が終了 
したとき、音声で通知してくれるプラグイン 
VimShellの仕様上、通知されない場合がある(改善したい)
VimShell hooks
VimShellでは様々なタイミングに 
hook関数を呼ぶことができる
エラー発生時に音声で教えてくれる 
au MyAutoCmd FileType vimshell 
 call vimshell#hook#add( 
 'emptycmd', 
 'my_vimshell_emptycmd', 
 reti#lambda(":call shaberu#say('コマンドを入力してください') | return a:1")) 
au MyAutoCmd FileType vimshell 
 call vimshell#hook#add( 
 'notfound', 
 'my_vimshell_notfound', 
 reti#lambda(":call shaberu#say('コマンドが見つかりません') | return a:1"))
移動(cd)したときに 
「よっこいしょ」と喋る 
au MyAutoCmd FileType vimshell 
 call vimshell#hook#add( 
 ’chpwd’ , 
 ’my_vimshell_chpwd' , 
 reti#lambda(“:ShaberuSay 'よっこいしょ'"))
VimShell aliases
VimShellではコマンドエイリアスを 
定義することができる
time?コマンドで 
時間を教えてくれる 
call vimshell#set_alias( 
 ’time?’, 
 ’:call shaberu#say(strftime("はいっ。今は%H時%M分です"))')
lsを打ち間違えた(sl)ときに 
「きしゃぽっぽ」と喋る 
call vimshell#set_alias( 
 ’sl’, 
 ’:call shaberu#say("きしゃぽっぽ。きしゃぽっぽ。ぽぽ")')
…
とてもべんり(とても)
まとめ
Vimがしゃべると便利 
Vimがしゃべるとかわいい(重要)
Shaberu.vimは 
任意の音声合成エンジンを使用可能
OpenJTalkを使うとかなりかわいい(かなり)
もう一度言います
聴覚というリソースをもっと活用しよう
ありがとうございました 
イラスト: 
いらすとや (irasutoya.com) 
音声: 
OpenJTalk (mei voice)

More Related Content

かなりすごい発表(かなり) at VimConf2014