TokyoVim#2に行ってきた

TokyoVim#2 http://partake.in/events/f27590c3-efee-44bb-bbab-6a86c7b9593c

内容的にはvimに関することならvimscriptの開発や環境設定、ソースコードリーディングなど何をしてもOKで、
実はvimに関しないことでも何でもOK、emacs派の人間でもOKという非常に自由な会でした。

    • herokuで開発
    • 変態キーボードのキーマップ設定
    • uniteのインストール
    • 分散パージョン管理についての話
    • 読書
    • ストIIの話
    • お菓子食う
    • 昼飯食う
    • 乱入

などなど

自分のやった事

僕はvim-surroundの改造をやってみました。
vim-surroundは僕が使っているプラグインの中でもかなりお気に入りの部類に入るんですが、たまに気持ち悪い動きをしてくれて切なくなる時があります。
詳しくは以下。

あにゃログ - surrounding について考える

この方はありがたいことに修正まで行なわれているんですが、
このバージョンだとcsで空白あり括弧から空白なし括弧に置換できないっていう別の問題があります。
例として

if (|a == 'UNKO') { " |はカーソル位置

cs() " ※このバージョンでは通常のsurroundにたいして(と)がそれぞれ逆

を行うと

if ( a == 'UNKO' ) {

と置換されます。

今度はこの逆を行を実行。

if (| a == 'CHINKO' ) { " |はカーソル位置

に対して

cs)(

をすると

if ( a == 'CHINKO' ) {

のままで何も反応がありません。

この操作をすることが頻繁にある訳でもないですが、99回の操作に影響がなくても1回の問題があるだけで背中が痒くなって夜も眠れません。

対策

上記の例に対しては実は以下の入力で対応できます。

cs bb " スペース + bで空白のついた括弧の意味

しかし、これでは直感性に欠けてしまい操作時に迷ってタイムロスしまうこと請け合い。
なので以下のように修正しました。

@ -510,10 +510,26 @@ function! s:changesurround() " {{{1
   let a = s:inputtarget()
   if a == ""
     return s:beep()
+  elseif a == '>'
+    let a = ' a'
+  elseif a == ')'
+    let a = ' b'
+  elseif a == '}'
+    let a = ' B'
+  elseif a == ']'
+    let a = ' r'
   endif
   let b = s:inputreplacement()
   if b == ""
     return s:beep()
+  elseif b == '>'
+    let b = ' a'
+  elseif b == ')'
+    let b = ' b'
+  elseif b == '}'
+    let b = ' B'
+  elseif b == ']'
+    let b = ' r'
   endif
   call s:dosurround(a,b)
 endfunction " }}}1

泥臭えーーーーーーーーーーーーっ!
泥臭すぎるよーーっ!
てか自分で定義したサラウンドオブジェクトとか全く考慮してないし。

当初の目標は「修正してpull requestを送る」だったのですが、とてもじゃないけどこれは送れないので見送りすることに。
ただ動きとしては達成できたので満足してお腹いっぱいになってしまいました。
vim力低くてすいません。
その内またやります。

まとめ

基本的にはもくもくしているだけの会だったのですが、普段気になっていた点が無事(?)解消できてよかったです。
あと個人的にvim界の神ことkanaさんにお会いできいたのが嬉しかったです。
歩く:helpっぷりも存分に見せてもらいました。

次回開催は2/11(土)とのことです。
TokyoVim#3 http://partake.in/events/2ef98b32-7eaa-41e0-b8b7-14132e06ab3c

また時間があればお邪魔したいと思ってます。
当日来ていた皆さんどうもありがとうございました。