先日、ゴリラ.vim #9 に参加してライブコーディングをしてきた。
その際に作ったプラグインを整理して最低限の形した。整理する過程で色々変わったのでその話など。
公開したプラグインは以下。
どんなプラグインなのか
これは日本語における、ひらがな⇔カタカナの変換や全角⇔半角の変換をするプラグイン。
極稀に欲しくなる操作で、サクラエディタなどには標準で付いている。Vim でもやりたかったので作ってみることにした。ネタとしても小さめでライブコーディングでもなんとかなるかなという目論見。
試験的なプラグインということもあって、無駄に最新バージョンの Vim を要求する。scriptversion 4
が通らない Vim では動かない。
プラグイン名
変換するという想定でライブコーディング時には convja.vim という名前で作り始めた。
しかしあとであれこれ考えて、文字種の判定や抽出もできると便利かも(やるとは言っていない)と思い、汎用的な処理ができるように jautil.vim という名前にしてみた。無駄に汎用化してしまうのは私の悪い癖である。わかってはいる…。
インターフェース
ライブコーディング時では、以下のようなインターフェースを想定していた。
echo convja#convert('123アイウ', {'target': 'hankaku', 'type': 'kana'}) # => '123アイウ'
しかし作っているうちに紆余曲折があり、もっとシンプルに指定できるようにしたいなぁという気持ちになったので以下のような形式に落ち着いた。
echo jautil#convert('123アイウ', 'hankaku:kana') # => '123アイウ'
簡易とはいえ特殊な文法を知る必要があるが、まあ辞書の形式を知るのと大差ないだろう。
拡張
第2引数の target に配列を渡せるようにした。これにより、まず半角カナを全角カナにし、その後全角カナをひらがなにすることで全角/半角両方のカナをひらがなに直す、ということが1度の呼び出しでできる。
echo jautil#convert('アイウエオカきくけこ', ['hankaku:kana', 'katakana']) # => 'あいうえおかきくけこ'
また、第1引数に配列を渡すことで第1引数と第2引数を入れ替えられるようにした。これにより、partial を使って特定の変換をする関数を用意することができるようになる。
let H2Z = function('jautil#convert', [['hankaku']]) echo H2Z('abc') " => 'abc'
今後の展望
あれこれこうできたらいいなと思っていることはあるが、優先度は激低なのでやるかは不明。ライブラリだし vital module 化したいよなー。
もっとちゃんと使いたいぜって人がいたら Issue を立てたりしてください。やるかどうかはわからないですが…。