ujihisa.vimに参加してきました

uhihisaさんの帰国に合わせてVimmer達が集うためにujihisa.vimが開催されたので参加してきました。

shadow.vim kills your troublesome things by @ujm

たとえば、ujihisa.jsというモジュールをCoffeeScriptで作ろうとしているときに、普通ならujihisa.coffeeを作成してそこでCoffeeScriptを書いて、ターミナルでcoffee -c ujihisa.coffeeしてujihisa.jsを作成する。この作業の手間を省いてくれるプラギンがshadow.vimだ。

'ujihisa.js'と'ujihisa.js.shd'ファイルをまず作成しておく。
shdファイルの1行目に"## coffee -csb"を記述しておくと、shdファイルを保存したときに、指定したコマンドが実行され、ujihisa.jsが生成される。
特にCoffeeScriptに特化はしておらず、たとえば、markdownで書いてて保存するときにpandocなりblueclothなりを起動するようにすればHTMLが生成される、などの使い方がありいろいろ応用が利きそうなプラギンになっている。
影を殴っても本体には影響がないからshadow.vimという名前になった?らしい。

AKAPEN .vimrc feature by @kana1

Vim神が誰かの.vimrcを赤ペンするというセッション。以下が添削結果のdiffから抜粋したもの。

  • termencodingはencoding指定してたら別にいらない
  • nnorempa Y y$は便利。
  • nnoremap wも便利
  • nmapじゃなくてnoremap使う
  • 環境依存な場合はsetじゃなくてsetlocal使う
  • g:func()じゃなくてs:func()にしよう。
  • ...

"True" count 140 characters on Vim by @niw

140文字以内でつぶやくサービスを提供する会社では"正確に"140文字を計測することが、仕事の中で重要なタスクとなっている。 たとえば、140文字を超えているかの判定で次のようなコードは書いちゃいけない。

@tweet.length > 140

では、Unicodeで計測すればいいのかといえば、そうでもない。 なぜなら、合成文字と呼ばれるものがあるからだ。 たとえば、"0x65"と"0x301"を組み合わせて作る文字(〓)がそうだ。これをそのままUnicodeで数えると間違った結果をとってしまう。 表示上だと1文字だけど、2文字にカウントされてしまう。

@tweet.split(//).length > 140
# Ruby1.9だともちろん@tweet.lengthでいい

Unicodecanonicalにもっとも短い組み合わせを求める。ActiveSupport使える環境ならこうかける。

require 'active_support/all'
@tweet.mb_chars.normalize(:c).length > 140

では、Vimで140文字を数えるにはどうすればいい? 文字列の長さを数える関数としてVimは、strlen()、strdisplaywidth()、strwidth()、strchars()を提供している。

$ ruby -e 'print [0x65, 0x301].pack("U*")' > e.txt
"bufferの一行目に合成文字があるとして
strlen(getline(1))
"=> 3
strchars(getline(1))
"=> 2
strdisplaywidth(getline(1))
"=> 1
strwidth(getline(1))
"=> 1

この結果を見るとstrdisplaywidth()かstrwidth()使えばいいかもって思うけど、'○'とかの場合うまくいかない。

strdisplaywidth('○')
"=> 2
strwidh('○')
"=> 2

そこでsubstitute()を使う。

strlen(substitute(getline(1), '.', 'x', 'g'))
"=> 1
strlen(substitute('○', '.', 'x', 'g'))
"=> 1

ばっちり。

install vim-tiny on Linux Box by @gu4

Linux BoxにDebianの環境を作った。 Vimの環境もLinux Boxに作りたいけど、aptでインストールすると大量にリソースが奪われてしまう。
そこで、vim-tinyならば少ないディスク消費量で済む、というお話。

DO NOT reinvention of the wheel with vital.vim by @ujm

プラギンに埋め込むプラギンで、よくある環境依存のシステム関数(system)への対応(条件分岐がいらなくなる)やユーティリティを提供してくれるのがvital.vimだ。
unite.vimもvital.vimを使用している。

Learning Vim and Vim plugin in 5 minuts by @ShougoMatsu

スライドと某曲を一緒にお聴きください。
ネタが分かる人には腹筋が崩壊することこの上です。

As a Ruby committer Vim by @sora_h

Rubyコミッターとしての思うところをいろいろ聞いた。 バグレポートしっかりやれとか。 あとは、metrw.vimを使ったアップロードツールとかのお話でした。

misc

無線使えなかったりして迷惑をかけてしまいました。次回もし弊社で開催するのであれば、使えるようにしておきます。 Vimというだけでいろんな人が集まるなんて素敵だなぁと毎回思う。 ありがとうございました。