これはみんな喜ぶかも

uniconv.vim plugin ( http://d.hatena.ne.jp/janus_wel/20091218/1261122369 ) を機能変更で機能追加。まず <cword> を変換対象にするのを諦めて visual mode で highlight した部分に効果を及ぼすようにしたのと Unicode code point 形式の literal と search pattern への変換と cursor の下にある文字を The Unicode Consortium における名前に変換する ( 漢字には統一名がないので空文字になっちゃうけど ) 機能を追加。

以下が依存する file 群。 library ( ぽいもの )が絡むとここらへん面倒なんだよな。そろそろ zip か vimball あたりを考えた方がいいかな。

具体的には以下のようなことや、

" before
let crestfallen = "(´・ω・`)"
echo crestfallen =~ "(`・ω・´)"

" after
" highlight (´・ω・`) in visual mode and then hit <Leader>ucl
let crestfallen = "\u0028\u00b4\u30fb\u03c9\u30fb\uff40\u0029"
" highlight (`・ω・´) in visual mode and then hit <Leader>ucp
echo crestfallen =~ "\%u0028\%uff40\%u30fb\%u03c9\%u30fb\%u00b4\%u0029"

以下のようなことができるよということで。

** before
- 全角スペース U+3000 " " の IDEOGRAPHIC て何だ ?
- one of umlaut is ä

** after
hit <Leader>un on a character you wanna know its name
- 全角スペース U+3000 "IDEOGRAPHIC SPACE" の IDEOGRAPHIC て何だ ?
- one of umlaut is LATIN SMALL LETTER A WITH DIAERESIS

今回一番時間かかったのが autoload/unicode/namelist.vim なんだけどこいつは The Unicode Consortium で配布されている UnicodeData.txt ( http://www.unicode.org/Public/UNIDATA/UnicodeData.txt ) を vim の Dictionary 形式に変換したもの。一応 Unicode Terms of Use ( http://www.unicode.org/copyright.html ) は見てみたんだけどおれの英語力では改変やら配布やらの制限はないけど無補償ということぽいことがわかったくらいでこういう形で配布していいのかどうか 2 割くらいわからん感じ。多分大丈夫だと思うんだけどこういう文書て読み慣れてないから根本的に間違ってる可能性もある。

でまぁ、文字の名前の定義をどうやって持つかについていろいろ試してみたんだけど結局 Dictionary として全部 memory に載せてしまうというのが一番楽かつ速かった。以下経緯。

  1. UnicodeData.txt をそのままで hidden buffer に load しておいて要求があったときに引く
    • hidden buffer への load までは出来たけどそのあとのやりかたがわからんので却下。
  2. :vimgrep ( internal grep ) を使って UnicodeData.txt をそのつど引く
    • 遅すぎて ( 一個引くのに体感で約 1 秒弱 ) 却下。
  3. Dictionary に変換して autoload させる
    • 行継続を使って見やすく生成した場合最初の load に体感で約 10 秒ほど時間がかかるので却下。
    • 行継続なくして 1 行で書き下すと 0.5 秒弱で load 完了というわけで採用。

変換 script は perl で。あーこれ dotfiles じゃねぇや。まぁいいか。