Vim で Unicode エスケープシーケンスを変換
Vim で JSON 文字列なファイルを以下のようなコマンドを使って整形するとする。
:%!python -m json.tool
綺麗にインデントが出て嬉しいけど、そこにマルチバイトな文字列があれば Unicode エスケープシーケンスにして変換してくれる。
Unicode エスケープシーケンスなのが何の文字列なのか一目で分かり辛いので以下のようなのをでっち上げた。
# めんどかったので Python さんの力を借りてる
let s:save_cpo = &cpo set cpo&vim python << PYTHONEOF import vim def unicode_escape(): start = vim.eval('start') end = vim.eval('end') lines = vim.eval('val') string = lines[int(start) - 1:int(end)] print string.decode('unicode_escape').encode('utf-8') PYTHONEOF function! UnicodeEscapeDecode() range let start = col("'<") let end = col("'>") let lines = getline('.') python unicode_escape() endfunction let &cpo = s:save_cpo unlet s:save_cpo
これで、Unicode エスケープシーケンスな文字列をビジュアル選択して、その状態で「:」を押す。
すると :'<,'> と表示されて入力状態になるので、call UnicodeEscapeDecode() と入力すると utf-8 な文字列を echo エリアに表示してくれる。